iOS设计模式之单例
2020/6/28 23:27:09
本文主要是介绍iOS设计模式之单例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
定义
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
该模式在各类工程中很常见,单例类提供创建与访问类的唯一对象的访问点,并保证它唯一、一致而且为人熟知。
搭配其他模式
- 工厂方法
- 命令模式
使用场景
在以下情形时,可以考虑使用单例模式:
- 类只能有一个实例,而且必须从一个为人熟知的访问点对其进行访问,比如工厂方法
- 这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。
类图结构
单例类图如下:
不同的客户端调用Singleton的shareInstance方法生成的只有唯一的一个Singleton对象。代码实现
下面我们用代码实现单例方法
@interface XQSingleton : NSObject + (instancetype)shareInstance; @end @implementation XQSingleton + (instancetype)shareInstance{ static XQSingleton *shareInstance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ shareInstance = [[super allocWithZone:NULL] init]; }); return shareInstance; } + (instancetype)allocWithZone:(struct _NSZone *)zone{ return [self shareInstance]; } - (id)copy{ return self; } - (id)mutableCopy{ return self; } @end 复制代码
以上代码有以下几点一一展开说:
- 在XQSingleton的@interface中声明shareInstance接口,提供给外部调用返回单例对象。
- 在类实现中shareInstance使用static XQSingleton *shareInstance,这种静态局部对象是为了保持返回对象的唯一性。
- 使用GCD的dispatch_once函数确保该对象的初始化方法只执行一次,保证了线程安全。
- 初始化使用[super allocWithZone:NULL]是为了重载当前类的allocWithZone方法,只能使用父类的对象分配方法来创建对象。
- 重载allocWithZone方法是为了防止外部调用alloc创建出另外一个新的XQSingleton对象。
- 重载copy和mutableCopy方法时为了防止外部调用copy或者mutableCopy方法时,生成新的对象。
Cocoa Touch框架使用单例
- UIApplication 类 UIApplication单例类在框架中极为常用。它提供了一个控制并协调iOS应用程序的集中点。在应用程序中处理许多内务管理任务,包含传入的用户事件的最初路由,UIControl事件分发给合适的目标对象,维护应用程序中打开所有的UIWindow对象的列表等等。
- NSFileManager类 NSFileManager通过defaultManager类方法进行创建和访问文件系统。提供的统一的访问接口。
总结
只要应用程序需要用集中式的类来协调其服务,这个类就应生成单一的实例,而不是多个实例。
这篇关于iOS设计模式之单例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-10-05Swift语法学习--基于协议进行网络请求
- 2022-08-17Apple开发_Swift语言地标注释
- 2022-07-24Swift 初见
- 2022-05-22SwiftUI App 支持多语种 All In One
- 2022-05-10SwiftUI 组件参数简写 All In One
- 2022-04-14SwiftUI 学习笔记
- 2022-02-23Swift 文件夹和文件操作
- 2022-02-17Swift中使用KVO
- 2022-02-08Swift 汇编 String array
- 2022-01-30SwiftUI3.0页面反向传值