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