单例模式,常见实现方式为,在类中编写名为sharedInstance的方法,该方法只会返回全类共用的单例实例,而不会每次调用时都创建新的实例。
使用同步块:
@implementation EOCClass
+ (id)sharedInstance{
static EOCClass *sharedInstance = nil;
@synchronized(self){
if(!sharedInstance){
sharedInstance = [[self alloc] init];
}
}
return sharedInstance;
}
@end
利用GCD特性,dispatch_once():
@implementation EOCClass
+ (id)sharedInstance{
static EOCClass *sharedInstance = nil;
// 每次调用都必须使用完全相同的标志,所以可以将标记声明在static或global作用域中
static dispatch_once_t onceToken;
// 只会执行一次
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
@end
使用dispatch_once可以简化代码并且彻底保证线程安全,而且更加高效。
网友评论