分享最热门的资讯
单例介绍
-
单例模式: 一个类只有一个实例对象。
-
使用场合:在整个应用程序共享一份资源(这份资源只需要创建初始化一次)。
-
ARC实现单例:
-
在类的内部提供一个static修饰的全局变量static SingletonVC * _singletonVC;;
-
提供一个类方法方便外界访问+ (instancetype)share;;
-
重写initWithZone方法,保证永远只为单例分配一次存储空间。
单例写法
第一种:GCD的一次函数(dispatch_once_t)
推荐指数:?????
#import "SingletonVC.h" // 创建静态对象 防止外部访问 static SingletonVC * _singletonVC; @implementation SingletonVC + (instancetype)allocWithZone:(struct _NSZone *)zone{ static dispatch_once_t onceToken; // 一次函数 dispatch_once(&onceToken, ^{ if (_singletonVC == nil) { _singletonVC = [super allocWithZone:zone]; } }); return _singletonVC; } + (instancetype)share{ return [[self alloc] init]; } @end
-
第二种:线程锁
-
推荐指数:???
#import "SingletonVC.h" // 创建静态对象 防止外部访问 static SingletonVC * _singletonVC; @implementation SingletonVC + (instancetype)allocWithZone:(struct _NSZone *)zone{ //线程锁 @synchronized (self) { if (_singletonVC == nil) { _singletonVC = [super allocWithZone:zone]; } } return _singletonVC; } + (instancetype)share{ return [[self alloc] init]; } @end
-
第三种:懒加载模式
-
推荐指数:?
-
不推荐使用这种方法,线程不安全。
#import "SingletonVC.h" static SingletonVC * _singletonVC; @implementation SingletonVC + (instancetype)allocWithZone:(struct _NSZone *)zone{ if (_singletonVC == nil) { _singletonVC = [super allocWithZone:zone]; } return _singletonVC; } + (instancetype)share{ return [[self alloc] init]; } @end
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
ios学习从入门到精通尽在姬长信