单例模式算是开发中比较常见的一种模式了。在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的方式,可以使用第一种方式。