欢迎来到天天文库
浏览记录
ID:44416437
大小:109.50 KB
页数:3页
时间:2019-10-21
《iOS开发浅谈单例模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、iOS开发浅谈单例模式先说说单例模式的概念,从百科里查到单例模式是一种常用的软件设计模式。在它的核心结构屮只包含一个被称为单例的特殊类。通过单例模式可以保证系统屮一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。那么要编写单例模式,首先要禁止外部创建对象,然后只允许H身内部创建一个唯一的对象,那么外部有哪些可以创建对象的方式呢?在ARC模式下(MRC在此不作讨论):1、使用类方法alloc2、使用类方法allocWithZo
2、ne:3、使用对彖方法copy4、使用类方法new为了禁止这些方法,应该垂写这些方法或想办法让这些方法不能彼调用。1>类方法alloc由于此方法会默认调用allocWithZone:,所以只需要处理allocWithZone:就可以了。2、类方法allocWithZone:重写此方法,讣其直接调用当前单例方法。3>对彖方法copy此方法要求自定义类必须耍遵循NSCopying协议,本身就不町以直接调用,不用做处理就好。4、类方法new此方法默认调用alloc和init,上面已经处理了alloc,这里不需要额外处理。写到此处
3、,单例模式己经可以实现,但是为了让外部调用init的时候保持一致性,也可以将init方法重写一下(建议强迫症的人使用,因为其实不重写也不影响)。好,看个例子:^import^MyApplication.h〃@implomentalionMyApplication(instancetype)init{return[[sclfclass]sharedApplication];}-(instancetype)initPrivate{if(self=[superinit]){}roturnself;}+(instancetype)
4、allocWithZone:(struct_NSZone*)zone{return[seifsharcdApplication];}+(MyApplication*)sharedApplication{staticMyApplication*application;/********方式一:使用GCDstaticdispatchoncetonceTokcn;dispatchonce(&onceToken,"{if(!application){application二[[superal1ocWithZone:NULL]ini
5、tPrivate];});//方式二:@synchroni7ed(sel『){if(!application){application二[[supcrallocWithZonc:NULL]initPrivatc];returnapplication;©end
此文档下载收益归作者所有