2022年设计模式ForiOS--单例模式宣贯 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年设计模式ForiOS--单例模式宣贯 .pdf》由会员分享,可在线阅读,更多相关《2022年设计模式ForiOS--单例模式宣贯 .pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、设计模式For iOS 第 02 式单例模式整理: BeyondVincent(破船 ) 时间: 2013.05.09 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 2 目录目录2第 02 式 单例模式 . 31.0.简介 . 31.0.1.什么是单例模式 . 31.0.2.什么时候使用单例模式? . 41.1.iOS 中单例模式的实现方法 . 41.2.单例的使用 . 91.3.代码下载地址 . 101.4.参考 . 11
2、关于设计模式 For iOS的整理 . . 12名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 12 页 - - - - - - - - - 3 第 02 式 单例模式1.0. 简介1.0.1. 什么是单例模式单例模式 是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。在iOS 开发中,单例模式是非常有用的一种设计模式。如下图,是一个简单单例模式的UML 类图。iOS SDK 中也有许多类使用了单例模式,例如,UIApplication :当程
3、序启动的时候,会调用 UIApplicationMain 方法,在该方法中,会实例化一个UIApplication对象, 之后在程序中的任意地方调用sharedApplication方法都将返回一个与当前应名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12 页 - - - - - - - - - 4 用程序相关的 UIApplication 实例( UIApplicationMain 方法中创建的 UIApplication单例) 。1.0.2. 什么时候使用单例模式?
4、在程序中,单例模式经常用于只希望一个类只有一个实例,而不运行一个类还有两个以上的实例。当然,在iOS SDK 中,根据特定的需求,有些类不仅提供了单例访问的接口,还为开发者提供了实例化一个新的对象接口,例如,NSFileManager可以通过 defaultManager方法返回相同的一个NSFileManager对象。如果需要新的一个NSFileManager实例对象,可以通过init 方法。1.1. iOS 中单例模式的实现方法iOS 中单例模式的实现方式一般分为两种:Non-ARC(非 ARC)和 ARC+GCD。1)NON-ARC( 非 ARC)非 ARC 的实现方法如下所示:BVNo
5、nARCSingleton.h 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - 5 / / BVNonARCSingleton.h / SingletonPattern / / Created by BeyondVincent on 13-5-9. / Copyright (c) 2013 年 BeyondVincent. All rights reserved. / #import <Foundation/Founda
6、tion.h> interface BVNonARCSingleton : NSObject property ( nonatomic, retain) NSString *tempProperty; + (BVNonARCSingleton *)sharedInstance; end BVNonARCSingleton.m / / BVNonARCSingleton.m / SingletonPattern / / Created by BeyondVincent on 13-5-9. / Copyright (c) 2013 年 BeyondVincent. All rights r
7、eserved. / #import BVNonARCSingleton.h implementation BVNonARCSingleton static BVNonARCSingleton *sharedInstance = nil; / 获取一个 sharedInstance实例,如果有必要的话,实例化一个+ (BVNonARCSingleton *)sharedInstance if (sharedInstance = nil) sharedInstance = super allocWithZone:NULL init; return sharedInstance; / 当第一次使用
8、这个单例时,会调用这个init 方法。- (id)init self = super init; if (self) / 通常在这里做一些相关的初始化任务名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - 6 return self; / 这个 dealloc 方法永远都不会被调用-因为在程序的生命周期内容,该单例一直都存在。 (所以该方法可以不用实现)-(void)dealloc super dealloc; / 通过返回当前的
9、sharedInstance实例,就能防止实例化一个新的对象。+ (id)allocWithZone:(NSZone*)zone return self sharedInstance retain; / 同样,不希望生成单例的多个拷贝。- (id)copyWithZone:(NSZone *)zone return self; / 什么也不做该单例并不需要一个引用计数(retain counter)- (id)retain return self; / 替换掉引用计数这样就永远都不会release这个单例。- (NSUInteger)retainCount return NSUIntegerM
10、ax; / 该方法是空的不希望用户release掉这个对象。- (oneway void)release /除了返回单例外,什么也不做。- (id)autorelease return self; end 实际上上面的代码苹果官网也有提供:Creating a Singleton Instance ,只不过没有给出头文件的定义。上面用非ARC 实现单例的方法是线程不安全的,如果有多个线程同时调用 sharedInstance 方法获取一个实例,而 sharedInstance方法需要花费名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
11、 - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 7 1-2 秒钟的时间,那么 BVNonARCSingleton 的 init 方法就可能会被多次调用, 也就是不同线程获得的BVNonARCSingleton 有可能不是同一个实例。怎么解决线程的不安全呢?答案是使用 synchronized来创建互斥锁即可。/ 保证在实例化的时候是线程安全的(当然,该方法不能保证该单例中所有方法的调用都是线程安全的)synchronized (self) if(sharedInstance = nil) sharedInstance = super
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年设计模式ForiOS-单例模式宣贯 2022 设计 模式 ForiOS
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内