iOS模式解析单例模式

释放双眼,带上耳机,听听看~!

设计模式-单例模式

1、为什么用单例模式

1.1、OC编程习惯

xcode 4.2之前使用MRC
alloc创建的对象需要手动release
xcode4.2之后使用ARC
自动释放内存

1.2、 使用场景

  • controls concurrent access to a shared resource.
  • access to the resource will be requested from multiple, disparate parts of the system.
  • there can be only one object.
  • 涉及到资源共享的场景,只需要一个对象而不需要重复的创建多个对象,一般滴,系统中使用到的 RecycleBin Finder 都是单例对象

常用到的资源共享的场景:

  • 文件型的资源共享:

数据库文件、设置存储文件、缓存文件等的共享并发操作
1、IO操作是资源密集型的操作,这种情形如果存在多个实例会导致资源消耗严重
2、在多个地方操作同一个文件会存在数据不一致的问题
3、共享使用单例容易管理
IOS系统中的设置存储文件操作管理者NSUserDefaults、缓存文件管理者NSURLCookieStorage都是使用单例的设计模式

  • 全局的消息处理,队列处理等

IOS系统中的消息中心NSNotificationCenter在APP内全局处理通知的收发;
UIApplication管理APP进程中事件队列(基于NSRunLoop事件循环)、UIApplication全局处理URL、UIApplication全局处理推送通知的接收

iOS系统中的单例
UIApplication 管理全局的设置和事件

  • 设置UIApplicationDelegate delegate
  • 注册通知 registerForRemoteNotifications
  • 管理window keyWindow
  • 管理StatusBar statusBarStyle/statusBarHidden
  • 打开URL canOpenURL openURL

NSUserDefaults 管理全局的用户数据
NSNotificationCenter 管理全局的通知监听
NSURLCookieStorage 管理全局的Cookie
NSFIleManager 管理全局的文件操作
NSURLCache
UIAccelerometer

开发过程中常用到的单例

  • 数据库链接管理、数据库连接池
  • 网络连接请求管理、下载管理器
  • 用户信息管理
  • Log记录

2、单例模式的使用

2.1、单例模式的特点

2.1.1、有且只有一个实例
2.1.2、必须自行创建一个实例
2.1.3、必须提供一个全局的唯一访问点,一般是一个静态的公有方法
2.1.4、必须是线程安全的,在多线程环境中不能创建多个对象

2.2、角色划分

2.2.1、单例类
2.2.2、客户端使用者

2.3、如何实现

2.3.1、提供一个静态的实例
2.3.2、提供一个静态的类方法,创建和返回静态实例
2.3.3、保证初始化只有一个实例对象

2.4、几种实现方式

2.4.1、普通的单例模式
2.4.2、线程安全的单例模式,使用GCD
2.4.3、load方法创建的单例模式,饿汉式的创建,应用程序加载运行的时候就会调用,不会等到用户手动调用,如果单例对象创建是耗时操作,或者有依赖到其他的对象创建、避免使用这种方式

2.5、单例的继承处理
swift可以使用final修饰类,处理单例类不可被继承
swift可以定义private的构造方法,单例模式的设计更加的标准
swift 使用静态属性实例化: private static let instance = SingleTon();创建的对象相当于OC中使用GCD创建的单例对象,并且是线程安全的。
swift 使用结构体实现单例:线程安全

private class var shareInstance = SingleTon() {
struct Static {
static let instance = SIngleTon()
}
return Static.instance;
}

Java使用双重检查保证了线程安全以及效率和性能

if (instalce == null) {
synchronized (SingleTon.class) {
if (instalce == null) {
instance = new SingleTon();
}
}
}

人已赞赏
iOS文章

iOS模式分析策略模式

2020-4-28 0:18:06

iOS文章

iOS第三方平台集成组件化

2020-4-28 1:33:01

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索