iOS: The Two Ways of Singleton Pattern

iOS開發中,單例模式用的不少,什麼是單例,簡單來說「單例是一個類,這個類只有一個實例被實例化。」一般咱們會有2種方式使用單例: html

1.同步鎖的方式 ios

+ (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:等,具體能夠參見: spa

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

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

Reference: htm

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

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

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

相關文章
相關標籤/搜索