IOS中单例的设计

2025-06-07 05:02:54

1、单例模式的作用可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问;从而方便地控制了实例个数,并节约系统资源

2、单例模式的使用场合在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)

3、单例模式在ARC\MRC环境下的写法有所不同,需要编写2套不同的代码

4、3.1 可以用宏判断是否为ARC环境#if__has_feature(objc_arc)//ARC#else//MRC#endif

IOS中单例的设计

5、3.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;}

IOS中单例的设计

6、3.3非钽吟篑瑜ARC中(MRC),单例模式的实现(比ARC多了几个步骤)(1)实现内存管理方法-(id)retain{returnself稆糨孝汶;}-(NSUInteger)retainCount{return1;}-(onewayvoid)release{}-(id)autorelease{returnself;}

IOS中单例的设计

7、具体实现

8、4.1新建一个项目,名为“单例设计模式”

IOS中单例的设计

9、4.2新建一个名为“SingletonDemo”的类,继承自“NSObject”

IOS中单例的设计
IOS中单例的设计
IOS中单例的设计

10、4.3在类的头文件中设计一个创建单例对象的类方法:+(instancetype)sharedSingletonDemo;

IOS中单例的设计

11、4.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

IOS中单例的设计
IOS中单例的设计
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:60
  • 阅读量:59
  • 阅读量:56
  • 阅读量:74
  • 阅读量:27
  • 猜你喜欢