单例,singleton Instance, 特点:全局里独一无二的,只有一个实例,只初始化一次;
一般是两种写法,一个是GCD的写法,一个是普通的加锁的写法;
GCD写法
+ (id)sharedInstance {
staticInstance*sharedInstance =nil;
staticdispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[Instancealloc]init];
});
returnsharedInstance;
}
+ (id)sharedInstance {
staticInstance*sharedInstance =nil;
staticdispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[Instancealloc]init];
});
returnsharedInstance;
}
onceToken默认值是0,只有等于0的时候才会执行大括号里的代码(也就是初始化),初始化操作执行后,就会变成一个不为零的数,保证初始化一次。
普通写法
+ (id)sharedInstance {
staticInstance*sharedInstance =nil;
@synchronized (self) {
if(sharedInstance ==nil) {
sharedInstance = [[Instancealloc]init];
}
}
returnsharedInstance;
}