码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-07 14:32:43      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:

// .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(&onceToken, ^{             _instace = [super allocWithZone:zone];         });         return _instace;     }      + (instancetype)shared##name     {         static dispatch_once_t onceToken;         dispatch_once(&onceToken, ^{             _instace = [[self alloc] init];         });         return _instace;     }      - (id)copyWithZone:(NSZone *)zone     {         return _instace;     }

#else

    #define HMSingletonM(name)     static id _instace;      + (id)allocWithZone:(struct _NSZone *)zone     {         static dispatch_once_t onceToken;         dispatch_once(&onceToken, ^{             _instace = [super allocWithZone:zone];         });         return _instace;     }      + (instancetype)shared##name     {         static dispatch_once_t onceToken;         dispatch_once(&onceToken, ^{             _instace = [[self alloc] init];         });         return _instace;     }      - (id)copyWithZone:(NSZone *)zone     {         return _instace;     }      - (oneway void)release { }     - (id)retain { return self; }     - (NSUInteger)retainCount { return 1;}     - (id)autorelease { return self;}

#endif

##可以直接连接宏中的参数

如果一条宏太长,以至于一行放不下,就需要在每行的结尾加一个‘\’,表示下一行属于这条宏,和一行中放不下一条

字符串一样

要在arc和mrc模式下都能使用,就需要用预处理宏判断一下

#if __has_feature(objc_arc)

这里放置arc模式下的单例宏

#else

这里放置非arc模式下的单例宏

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

标签:

原文地址:http://www.cnblogs.com/forflame/p/4558419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!