iOS中的单例模式
2016-06-15 09:56
323 查看
ARC
懒汉模式
#import "Singleton.h" @implementation Singleton static id _instance; /** * alloc方法内部会调用这个方法 */ + (instancetype)allocWithZone:(struct _NSZone *)zone{ if (_instance == nil) { // 防止频繁加锁 @synchronized(self) { if (_instance == nil) { // 防止创建多次 _instance = [super allocWithZone:zone]; } } } return _instance; } + (instancetype)sharedSingleton{ if (_instance == nil) { // 防止频繁加锁 @synchronized(self) { if (_instance == nil) { // 防止创建多次 _instance = [[self alloc] init]; } } } return _instance; } - (id)copyWithZone:(NSZone *)zone{ return _instance; } @end
饿汉模式(不常用)
#import "HMSingleton.h" @implementation Singleton static id _instance; /** * 当类加载到OC运行时环境中(内存),就会调用一次(一个类只会加载1次) */ + (void)load{ _instance = [[self alloc] init]; } + (instancetype)allocWithZone:(struct _NSZone *)zone{ if (_instance == nil) { // 防止创建多次 _instance = [super allocWithZone:zone]; } return _instance; } + (instancetype)sharedSingleton{ return _instance; } - (id)copyWithZone:(NSZone *)zone{ return _instance; } @end
GCD实现单例模式
@implementation Singleton static id _instance; + (instancetype)allocWithZone:(struct _NSZone *)zone{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [super allocWithZone:zone]; }); return _instance; } + (instancetype)sharedSingleton{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[self alloc] init]; }); return _instance; } - (id)copyWithZone:(NSZone *)zone{ return _instance; } @end
相关文章推荐
- iOS开发-清理缓存功能的实现
- layoutSubviews总结
- IOS 字符串中去除特殊符号 stringByTrimmingCharactersInSet
- iOS添加Prefix Header
- runtime的简单介绍
- iOS-----写一个规范的单例--->
- iOS 9 自动布局 1: 开始使用
- 申请苹果开发者账号支付(没有Visa怎么办?)
- iOS 想怎么转就怎么转
- 【代码笔记】iOS-图文混排(HBLabelDemo)
- 【代码笔记】iOS-图文混排(HBLabelDemo)
- iOS 【上架问题】ERROR ITMS-90086
- 浅谈iOS开发中方法延迟执行的几种方式
- 分分钟解决iOS开发中App启动广告的功能
- iOS多张图片上传多线程处理方法(可获取最后一张上传状态后的信号)
- iOS多线程_获取线程队列执行完毕的信号
- Quartz2D绘图
- iOS TextField 使用大全
- xcode ios gdb
- iOS显示HTML