版权声明:转载请注明出处。 https://blog.csdn.net/rentee/article/details/80922180
+ (AppManager *)shareInstance { //注释1
static AppManager *instance; //注释2
static dispatch_once_t t; //注释3
dispatch_once(&t, ^{ //注释4
instance = [[super alloc] init];
});
return instance;
}
注释1. Java中喜欢命名为getInstance,但是这里用shareInstance,因为get前缀在OC中有特殊含义
注释2. 与Java的static可不一样,这里的局部变量instance的存储区会从栈区放到静态存储区,从而延长了其生命周期,下次调用shareInstance方法时,还是会使用之前的instance实例
注释3. dispatch_once iOS GCD技术了解一下 http://www.cocoachina.com/ios/20161031/17887.html 当然,也可以用@synchronized方式实现,不过dispatch_once效率更高
注释4. dispatch_once 的机制确保了其线程安全