OC单例快速实现
首先新建一个头文件,定义如下宏:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | // .h文件的实现#define SingletonH(methodName) + (instancetype)shared##methodName;// .m文件的实现#if __has_feature(objc_arc) // 是ARC#define SingletonM(methodName) \staticid_instace = nil; \+ (id)allocWithZone:(struct_NSZone *)zone \{ \if(_instace == nil) { \staticdispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [superallocWithZone:zone]; \}); \} \return_instace; \} \\- (id)init \{ \staticdispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [superinit]; \}); \return_instace; \} \\+ (instancetype)shared##methodName \{ \return[[selfalloc] init]; \} \+ (id)copyWithZone:(struct_NSZone *)zone \{ \return_instace; \} \\+ (id)mutableCopyWithZone:(struct_NSZone *)zone \{ \return_instace; \}#else // 不是ARC#define SingletonM(methodName) \staticid_instace = nil; \+ (id)allocWithZone:(struct_NSZone *)zone \{ \if(_instace == nil) { \staticdispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [superallocWithZone:zone]; \}); \} \return_instace; \} \\- (id)init \{ \staticdispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [superinit]; \}); \return_instace; \} \\+ (instancetype)shared##methodName \{ \return[[selfalloc] init]; \} \\- (oneway void)release \{ \\} \\- (id)retain \{ \returnself; \} \\- (NSUInteger)retainCount \{ \return1; \} \+ (id)copyWithZone:(struct_NSZone *)zone \{ \    return_instace; \} \ \+ (id)mutableCopyWithZone:(struct_NSZone *)zone \{ \    return_instace; \}#endif | 
然后在你定义单例类的
.h 文件 写 SingletonH(MyMethodName)
.m 文件写 SingletonM(MyMethodName)
搞定!
OC单例快速实现的更多相关文章
- OC 单例实现
		2. 在.h 文件遵循 <NSCopying,NSMutabalecopying> 3.定义宏,实现任意类型单单例 #define SingleH(name) +(instancetype ... 
- oc 单例
		单例模式: //static id _instace; // //+ (id)allocWithZone:(struct _NSZone *)zone //{ // static dispatch_o ... 
- Swift中的单例的实现方式
		单例在iOS日常开发中是一个很常用的模式.对于希望在 app 的生命周期中只应该存在一个的对象,保证对象的唯一性的时候,一般都会使用单例来实现功能.在OC单例的写法如下: @implementatio ... 
- OC与Swift单例
		OC: +(instancetype)shareNetworkTools{ static id instance; static dispatch_once_t onceToken; //onceTo ... 
- ios oc 和 swfit 用dispatch_once 创建单例
		网上已经有方法了,我这里就是抄了下,原文链接 http://bj007.blog.51cto.com/1701577/649413 http://blog.csdn.net/u010124617/ar ... 
- OC中两种单例实现方式
		OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ... 
- 【Swfit】Swift与OC两种语法写单例的区别
		Swift与OC两种语法写单例的区别 例如写一个NetworkTools的单例 (1)OC写单例 + (instancetype)sharedNetworkTools { static id inst ... 
- iOS快速单例宏
		// 单例 #define DECLARE_SHARED_INSTANCE(className) \ + (className *)sharedInstance; #define IMPLEMENT_ ... 
- iOS - OC SingleClass		单例类
		前言 单例对象能够被整个程序所操作.对于一个单例类,无论初始化单例对象多少次,也只能有一个单例对象存在,并且该对象是全局的,能够被整个系统访问到. 特点: 在内存中只有一个实例 提供一个全局的访问点 ... 
随机推荐
- 基于HT for Web 3D技术快速搭建设备面板
			以真实设备为模型,搭建出设备面板,并实时获取设备运行参数,显示在设备面板上,这相比于纯数值的设备监控系统显得更加生动直观.今天我们就在HT for Web的3D技术上完成设备面板的搭建. 我们今天模拟 ... 
- CSS魔法堂:深入理解line-height和vertical-align
			前言 一直听说line-height是指两行文本的基线间的距离,然后又说行高等于行距,最近还听说有个叫行间距的家伙,@张鑫旭还说line-height和vertical-align基情四射,贵圈真乱啊 ... 
- SQL--语句的执行顺序
- .Net语言 APP开发平台——Smobiler学习日志:Poplist控件在APP中的应用场景以及代码
			最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ... 
- C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表
			/* ---------------------------------------------------------- 文件名称:WMIUsbQuery.cs 作者:秦建辉 MSN:splashc ... 
- SyteLine实现字段过滤
			如果说某个下拉列表,想过滤某些选项,该怎样来做呢,在Infor Syteline实现起来是一件很容易的事情.如在Fixed Assets窗口中的Class Code的下拉列表中,如果不想"_ ... 
- Access is denied
			昨天有学习ASP.NET MVC的publish和IIS发行网站<简单的ASP.NET MVC发布>http://www.cnblogs.com/insus/p/4466200.html ... 
- asp.net页面后退,重复弹出上一页对话框处理办法
			我们在实例中,虽然页面内有导航,但是用户使用的时候难免会使用浏览器的后退按钮. 时常会发现,当后退的时候,上一页的对话框会自动弹出,下面是解决办法. 问题:使用此js代码,后退按钮时,重复显示对话框内 ... 
- C#再识委托
			从C#1到C#3逐步认识委托,由于C#4与C#5对委托改动并不大,故不作说明. 好久没看.NET了,一直在搞HybridAPP,都忘得差不多了,这也是自己从书中摘下笔迹,供日后翻阅. C# 1 1.什 ... 
- 火狐浏览器+Firebug+FirePath测试Xpath
			前言 抓取网页数据时使用HtmlAgilityPack分析,需要通过xpath定位页面元素.如果有个xpath的生成和验证工具就事半功倍了,火狐浏览器插件FirePath配合Firebug就能完美实现 ... 
