今天在别人写的关于单例模式的编写,感触挺深,因为关于单例模式的编写向来有很多争议,我觉得以下这个方法很适合我们平时的编程习惯,并且支持arc模式,
+ (MyViewController*)sharedMyViewController
{
static MyViewController *sharedSVC;
static dispatch_once_t onceToken;
//dispatch_once不仅意味着代码仅会被运行一次,而且还是线程安全的,这就意味着你不需要使用诸如@synchronized之类的来防止使用多个线程或者队列时不同步的问题。
dispatch_once(&onceToken, ^{
sharedSVC = [[self alloc] init];
});
return sharedSVC;
}
dispatch_once用于检查该代码块是否已经被调度的谓词(是一个长整型,实际上作为BOOL使用)。它还接收一个希望在应用的生命周期内仅被调度一次的代码块,对于本例就用于shared实例的实例化。
该方法有很多优势:
1 线程安全
2 很好满足静态分析器要求
3 和自动引用计数(ARC)兼容
4 仅需要少量代码