单例头文件

 1 // 帮助实现单例设计模式
 2
 3 // .h文件的实现
 4 #define SingletonH(methodName) + (instancetype)shared##methodName;
 5
 6 // .m文件的实现
 7 #if __has_feature(objc_arc) // 是ARC
 8 #define SingletonM(methodName)  9 static id _instace = nil; 10 + (id)allocWithZone:(struct _NSZone *)zone 11 { 12 if (_instace == nil) { 13 static dispatch_once_t onceToken; 14 dispatch_once(&onceToken, ^{ 15 _instace = [super allocWithZone:zone]; 16 }); 17 } 18 return _instace; 19 } 20 21 - (id)init 22 { 23 static dispatch_once_t onceToken; 24 dispatch_once(&onceToken, ^{ 25 _instace = [super init]; 26 }); 27 return _instace; 28 } 29 30 + (instancetype)shared##methodName 31 { 32 return [[self alloc] init]; 33 } 34 + (id)copyWithZone:(struct _NSZone *)zone 35 { 36 return _instace; 37 } 38 39 + (id)mutableCopyWithZone:(struct _NSZone *)zone 40 { 41 return _instace; 42 }
43
44 #else // 不是ARC
45
46 #define SingletonM(methodName) 47 static id _instace = nil; 48 + (id)allocWithZone:(struct _NSZone *)zone 49 { 50 if (_instace == nil) { 51 static dispatch_once_t onceToken; 52 dispatch_once(&onceToken, ^{ 53 _instace = [super allocWithZone:zone]; 54 }); 55 } 56 return _instace; 57 } 58 59 - (id)init 60 { 61 static dispatch_once_t onceToken; 62 dispatch_once(&onceToken, ^{ 63 _instace = [super init]; 64 }); 65 return _instace; 66 } 67 68 + (instancetype)shared##methodName 69 { 70 return [[self alloc] init]; 71 } 72 73 - (oneway void)release 74 { 75 76 } 77 78 - (id)retain 79 { 80 return self; 81 } 82 83 - (NSUInteger)retainCount 84 { 85 return 1; 86 } 87 + (id)copyWithZone:(struct _NSZone *)zone 88 { 89     return _instace; 90 } 91  92 + (id)mutableCopyWithZone:(struct _NSZone *)zone 93 { 94     return _instace; 95 }
96
97 #endif
时间: 2024-08-06 07:58:35

单例头文件的相关文章

iOS开发之单例头文件

// 帮助实现单例设计模式 // .h文件的实现 #define SingletonH(methodName) + (instancetype)shared##methodName; // .m文件的实现 #if __has_feature(objc_arc) // 是ARC #define SingletonM(methodName) static id _instace = nil; + (id)allocWithZone:(struct _NSZone *)zone { if (_inst

oc快速生成单例头文件解析

// .h文件 #define HMSingletonH(name) + (instancetype)shared##name; // .m文件 #if __has_feature(objc_arc) #define HMSingletonM(name) static id _instace; + (id)allocWithZone:(struct _NSZone *)zone { static dispatch_once_t onceToken; dispatch_once(&onceToke

iOS开发之单例设计模式(完整正确版本)

单例的意思从字面上就可以略知一二,所谓单例就是确保在程序运行过程中只创建一个对象实例.可以用于需要被多次广泛或者说多次使用的资源中,比如我们常见的网络请求类.工具类以及其它管理类等.比如我iOS开发中常见的系统单例[UIApplication sharedApplication].[NSUserDefaults  standardUserDefaults]等.在iOS开发中,单例模式是非常有用的一种设计模式.如下图,是一个简单的例模式的UML类图. 一.使用单例模式的作用 它可以保证某个类在程序

[转]Linux学习笔记——例说makefile 头文件查找路径

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile分为以下几个部分,更多内容请参考[例说makefile索引博文] 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.增加宏定义 5.增加系统共享库 6.增加自定义共享库 7.一个实际的例子 [

Linux学习笔记——例说makefile 头文件查找路径

0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己动手写一个makefile总觉得非常吃力.所以特意借助博客总结makefile的相关知识,通过例子说明makefile的具体用法. 例说makefile大致分为4个部分 1.只有单个C文件 2.含有多个C文件 3.需要包括头文件路径 4.一个较为复杂的例子 [代码仓库]--makefile-example 代码仓库位于bitbucket,可借助Tortoise

Facebook App 的头文件会有更多的收获

最近在看一些 App 架构相关的文章,也看了 Facebook 分享的两个不同时期的架构(2013 和 2014),于是就想一窥 Facebook App 的头文件,看看会不会有更多的收获,确实有,还不少.由于在选择 ipa 上的失误,下了个 7.0 版的 Facebook(最新的是 18.1),会稍有过时,不过后来又下了个 18.1 的看了下,发现变动其实不大.以下是我从头文件中获取到的一些信息(20多万行,浏览起来还是挺累的) 让视图组件可以方便地配置 这个在 Facebook 的演讲中也提

iOS 中的单例设计模式

单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单例在那个文件下都能取得到. 通过单例设计模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节省系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的选择. 下面来点实在的,创建单例代码上 方法1:基于线程安全创建一个单例 .h做一下声明 + (id)

单例是个什么鬼

单例是个什么鬼 写在前面 常常听到有人说起单例,那么单例到底是什么呢?又该怎么用呢?或者说,它的应用场景有哪些呢?为了搞清楚这些问题,决定自己亲自实践一下,加深感悟.文中用到的一些单例的实现方式可能是从网上参考的,感谢大家的分享和讲解,这里就不一一引用啦. 单例是什么 单例,顾名思义,就是单个实例,也就是说,某个类如果实现了单例模式,那这个类就只能生成一个实例.单例模式是设计模式的一种,关于设计模式,我大概了解过有工厂模式,抽象工程模式,观察者模式,原型模式等,具体使用哪种设计模式,要视具体应用

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一