iOS 设计模式 - 单例模式
来源:互联网 发布:奶油知多少 编辑:程序博客网 时间:2024/05/18 23:14
有些任务只能有一个实例,比如打印任务,比如一些资源管理器
UML图
一、使用步骤
1.写法一
(1)防止子类继承
(2)确保实例对象只出现一个
staticSLManager *center;@implementation SLManager+ (instancetype)defaultManager { //只创建一个实例 staticdispatch_once_t predicate; dispatch_once(&predicate, ^{ center = (SLManager *)@"SLManager"; center = [[SLManageralloc]init]; }); //防止子类使用 NSString *classString = NSStringFromClass([selfclass]); if ([classString isEqualToString:@"SLManager"] == NO) { NSParameterAssert(nil); } returncenter;}- (instancetype)init{ NSString *string = (NSString *)center; if ([string isKindOfClass:[NSStringclass]] == YES && [string isEqualToString:@"SLManager"]) { self = [superinit]; if (self) { //防止子类使用 NSString *classString = NSStringFromClass([selfclass]); if ([classString isEqualToString:@"SLManager"] == NO) { NSParameterAssert(nil); } } returnself; } returnnil;}
*(3)防止实例被释放掉
2.写法二
(1)确保实例对象只出现一个
+ (instancetype)defaultManager { @synchronized(self) { if (center == nil) { center = [[SLManageralloc]init]; } } returncenter;}+ (instancetype)allocWithZone:(struct_NSZone *)zone { @synchronized(self) { if (center == nil) { center = [superallocWithZone:zone]; returncenter; } } returnnil;}+ (id)copyWithZone:(NSZone *)zone { returnself;}- (instancetype)init{ @synchronized(self) { self = [superinit]; if (self) { } returnself; }}
二、基本属性
三、代码示例
1.实现单例模式的两种方法
https://github.com/shileseal/SLSingletonPatternDemo
2.单例模式的应用
用单例设计存储数据的接口
用单例接口隔离实现的细节
在单例提供接口的基础上实现封装
https://github.com/shileseal/SLSingleton
四、总结
2 0
- IOS设计模式--单例设计模式
- IOS单例设计模式
- iOS设计模式-单例
- iOS单例设计模式
- iOS 单例设计模式
- iOS 单例设计模式
- IOS设计模式之一:单例模式
- IOS设计模式之一:单例模式
- IOS设计模式之一:单例模式
- IOS设计模式之----单例模式
- iOS设计模式(02):单例模式
- iOS设计模式:单例模式
- iOS设计模式(02):单例模式
- iOS设计模式(02):单例模式
- iOS设计模式(02):单例模式
- IOS设计模式之一:单例模式
- iOS设计模式-------单例模式
- iOS设计模式之单例模式
- 为本地项目建立版本管理
- python爬虫获取郑大教务在线成绩数据
- C++11之生产者消费者
- linux下设置SSH服务开机启动
- Linux常用命令
- iOS 设计模式 - 单例模式
- JCIP-3-Sharing Objects
- Android知识结构图
- <LeetCode OJ> 278. First Bad Version
- iOS获取设备全局信息方法总结(如信号,电量,设备标示)
- spark源码学习(一):sparkContext的初始化分析(一)
- 数据结构自学小结
- linux学习--理解系统调用
- VS2015第一个小程序:HelloAnimal!