iOS: The Two Ways of 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

你可能感兴趣的:(iOS: The Two Ways of Singleton Pattern)