1、单例模式的作用可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问;从而方便地控制了实例个数,并节约系统资源
2、单例模式的使用场合在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)
3、单例模式在ARC\MRC环境下的写法有所不同,需要编写2套不同的代码
4、1 可以用宏判断是否为ARC环境#if__has_feature(objc_arc)//ARC#else//MRC#endif
5、2ARC中,单例模式的实现(1)在.m中保留一个全局的static的实例staticid_instance;(2)重写allocWithZone:方法,在这里创建唯一的实例(注意线程安全)+(id)allocWithZone:(struct_NSZone*)zone{@synchronized(self){if(!_instance){_instance=[superallocWithZone:zone];}}return_instance;}(3)提供1个类方法让外界访问唯一的实例+(instancetype)sharedDemo{@synchronized(self){if(!_instance){_instance=[[selfalloc]init];}}return_instance;}
6、3非ARC中(MRC),单例模式的实现(比ARC多了几个步骤)(1)实现内存管理方法-(id)retain{returnself;}-(NSUInteger)retainCount{return1;}-(onewayvoid)release{}-(id)autorelease{returnself;}
7、具体实现
8、1新建一个项目,名为“单例设计模式”
9、2新建一个名为“SingletonDemo”的类,继承自“NSObject”
10、3在类的头文件中设计一个创建单例对象的类方法:+(instancetype)sharedSingletonDemo;
11、4在类的.m文件中实现相应的方法#import"SingletonDemo.h"@implementationSingletonDemo//定义一个全局的static的实例staticid_instance;/***重写allocWithZone:方法,在这里创建唯一的实例*/+(id)allocWithZone:(struct_NSZone*)zone{staticdispatch_once_tonceToken;dispatch_once(&onceToken,^{_instance=[superallocWithZone:zone];});return_instance;}/***提供一个给外部调用的实例化类方法*/+(instancetype)sharedSingletonDemo{staticdispatch_once_tonceToken;dispatch_once(&onceToken,^{_instance=[[selfalloc]init];});return_instance;}/***为了考虑得更全面一些,把copy策略创建对象的方法也重写一遍*/+(id)copyWithZone:(struct_NSZone*)zone{return_instance;}@end