iOS: The Two Ways of Singleton Pattern
iOS: The Two Ways of Singleton Pattern
BluesChow 发表于3年前
iOS: The Two Ways of Singleton Pattern
  • 发表于 3年前
  • 阅读 16
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: ways, singleton pattern

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

共有 人打赏支持
粉丝 6
博文 143
码字总数 29622
×
BluesChow
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: