文档章节

iOS: The Two Ways of Singleton Pattern

BluesChow
 BluesChow
发布于 2015/02/28 15:02
字数 236
阅读 17
收藏 0

iOS开发中,单例模式用的很多,什么是单例,简单来讲“单例是一个类,这个类只有一个实例被实例化。”通常我们会有2种方式使用单例:

1.同步锁的方式

+ (MyClass *)shareInstance {
    static MyClass *obj = nil;
    @synchronized(self) { // **** 或者@synchronized([MyClass class])
        if (nil == obj) {
            obj = [[MyClass alloc] init];
        }
    }
    return obj;
}
2.GCD的dispatch_once方式
+ (MyClass *)shareInstance {
    static dispatch_once_t pred;
    static MyClass *obj = nil;
    dispatch_once_t(&pred, ^{
        obj = [[MyClass alloc] init];
    });
    return obj;
}

dispatch_once的方式同样可以完成和synchronized关键字一样的内容,但是dispatch_once的方式不需要付出锁的资源消耗,也不会带来额外的函数调用的消耗,因为dispatch_once本质上是一个宏。

如果是非ARC的话,就需要额外的实现几个方法,类似copyWithZone:等,具体可以参见:

http://blog.sina.com.cn/s/blog_7c452219010148jo.html

http://blog.csdn.net/ouyangtianhan/article/details/17709827

Reference:

http://blog.csdn.net/swj6125/article/details/9791183

http://www.ianisme.com/ios/1648.html

http://blog.csdn.net/sanpintian/article/details/8139635

© 著作权归作者所有

共有 人打赏支持
BluesChow
粉丝 5
博文 163
码字总数 29622
作品 0
深圳
程序员
Knowledge-Reserve

Knowledge-Reserve ComputerOperatingSystem 编译 静态库&动态库(Linux) 静态链接&动态链接 内存 内联函数&宏 Static&Const 死锁 线程安全 线程同步 锁 DataStructure Programme 集约型&离散...

旭宝爱吃鱼
08/16
0
0
面试官自述:面向高级开发人员的iOS面试问题

当您准备进行技术性iOS面试时,了解您可能会询问哪些主题以及经验丰富的iOS开发人员期望什么是非常重要的。 这是许多硅谷公司用来衡量iOS候选人资历水平的一系列问题。 这些问题涉及iOS开发的...

菇哒微课
04/26
0
0
iOS与JS交互之UIWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「UIWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
08/28
0
0
iOS与JS交互之WKWebView-协议拦截

级别:★★☆☆☆ 标签:「iOS与JS交互」「WKWebView与JS交互」「WKWebView拦截协议」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),J...

QiShare
09/01
0
0
iOS Design Patterns Excerpt

How MVC works MVC is a design pattern that enforces the separation between the input, processing, and output of an application. To this end, an application is divided into three......

Herbert77
2015/09/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

简易审计系统

1、有时候我们需要对线上用户的操作进行记录,可以进行追踪,出现问题追究责任,但是linux自带的history并不会实时的记录(仅仅在内存中,当用户正常退出(exit logout )时才会记录到history文件里...

芬野de博客
27分钟前
1
0
Qt那些事0.0.6

QML中使用Image,在设置source的后,通过Qt Quick2 Preview(qmlscene)遇到了图片找不到的问题: Image { id: success_img anchors.centerIn: parent ...

Ev4n
27分钟前
2
0
白话SpringCloud | 第十一章:路由网关(Zuul):利用swagger2聚合API文档

前言 通过之前的两篇文章,可以简单的搭建一个路由网关了。而我们知道,现在都奉行前后端分离开发,前后端开发的沟通成本就增加了,所以一般上我们都是通过swagger进行api文档生成的。现在由...

oKong
33分钟前
2
0
javah 生成jni文件的问题

命令:(on macbook for android) javah -d src/main/jni -jni -classpath /Users/Carlyle_Pro/Documents/android_adt/sdk/platforms/android-25/android.jar:build/intermediates/classes/......

Carlyle_Lee
36分钟前
1
0
Ubuntu 安装ssh服务以及开启root用户ssh登录

一、安装ssh服务 安装ssh服务 sudo apt-get update sudo apt-get install openssh-server 安装完成后启动ssh服务 sudo service ssh start 二、开启root用户ssh登录 解决root远程ssh不能登录,...

15834278076
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部