單例模式算是開發中比較常見的一種模式了。在iOS中,單例有兩種實現方式(至少我目前只發現兩種)。根據線程安全的實現來區分,一種是使用@synchronized,另一種是使用GCD的dispatch_once函數。
要實現單例,首先需要一個static的指向類本身的對象,其次需要一個初始化類函數。下面是兩種實現的代碼。
staticInstanceClass*instance;
+(InstanceClass*)defaultInstance{
@synchronized(self){
if(instance==nil){
instance=[[InstanceClassalloc]init];
}
}
returninstance;
}
2、GCD
staticInstanceClass*instance;
+(InstanceClass*)defaultInstance{
staticdispatch_once_tonceToken;
dispatch_once(&onceToken,^{
instance=[[InstanceClassalloc]init];
});
returninstance;
}
總的來說,兩種實現效果相同,但第二種GCD的實現方式寫起來比較簡單。如果不習慣GCD的方式,可以使用第一種方式。