iOS 开发中“宏”的高级使用——单利

来源:互联网 发布:sql编程基础 编辑:程序博客网 时间:2024/05/20 16:36

<div><span style="font-family:Comic Sans MS;font-size:24px;"><strong></strong></span></div><div><span style="font-family:Comic Sans MS;font-size:24px;"><strong>总体要领:</strong></span></div><ul><li><span style="font-family:Comic Sans MS;font-size:14px;color:#3366ff;">1. 宏里面记得传参数,如:SingletonH(<em><span style="background-color: rgb(153, 255, 255);">methodName</span></em>);</span></li><li><span style="font-family:Comic Sans MS;font-size:14px;color:#3366ff;">2. 用“##”号拼接类名,如:+ (instancetype)shared<span style="background-color: rgb(255, 255, 204);">##</span><em><span style="background-color: rgb(153, 255, 255);">methodName;</span></em></span></li><li><span style="font-family:Comic Sans MS;font-size:14px;color:#3366ff;">3. 遇到多行代码时,用“\”去结尾每一行,但是每段的最后一行除外,代码中已有警示;</span></li><li><span style="font-family:Comic Sans MS;font-size:14px;color:#3366ff;">4. ARC 判断,如代码中标示;</span></li><li><span style="font-family:Comic Sans MS;font-size:14px;color:#3366ff;">5. 直接把这段代码拿走用吧<img alt="得意" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/proud.gif" />.</span></li></ul>

<span style="font-family: 'Comic Sans MS';"><span style="font-size:14px;color:#009900;"></span></span>

<span style="font-family: 'Comic Sans MS';"><span style="font-size:14px;"></span></span><pre name="code" class="objc"><span style="font-family: 'Comic Sans MS'; font-size: 14px;"><em><strong>下面是一个</strong><span style="background-color: rgb(255, 255, 255);">Singleton.h<span></span>的内容</span></em></span>
<span style="font-family: 'Comic Sans MS'; font-size: 14px;"><span style="background-color: rgb(255, 255, 255);"><img src="http://img.blog.csdn.net/20151215222158029?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="378" height="133" alt="" /></span></span>

<span style="font-family: 'Comic Sans MS';"><span style="font-size:14px;color:#009900;">///>></span><span style="font-size:14px;color:#ff0000;"> </span><span style="color: rgb(255, 0, 0);"><span style="font-size:18px;">代码目的:帮助快速实现单例设计模式</span></span></span><span style="font-family:Comic Sans MS;"><span style="font-size:18px;"></span></span><span style="color:#009900;font-family: 'Comic Sans MS';">// .h文件的实现</span><span style="font-family:Comic Sans MS;">#define SingletonH(</span><em><span style="font-family:SimHei;background-color: rgb(153, 255, 255);">methodName</span></em><span style="font-family:Comic Sans MS;">) + (instancetype)shared<span style="background-color: rgb(255, 255, 204);">##</span></span><em><span style="font-family:SimHei;background-color: rgb(153, 255, 255);">methodName</span></em><span style="font-family:Comic Sans MS;">;</span><span style="color:#009900;font-family: 'Comic Sans MS';">// .m文件的实现</span><span style="font-family:Comic Sans MS;"></span><span style="font-family: 'Comic Sans MS'; background-color: rgb(255, 204, 51);">#if __has_feature(objc_arc)</span><span style="font-family: 'Comic Sans MS'; background-color: rgb(255, 204, 51);">    // 是ARC</span>
<span style="font-family: 'Comic Sans MS'; background-color: rgb(255, 204, 51);"></span>
<span style="font-family:Comic Sans MS;">#define SingletonM(</span><span style="background-color: rgb(51, 255, 255);"><span style="font-family:SimHei;">methodName</span></span><span style="font-family:Comic Sans MS;">) \static id _instace = nil; \+ (id)allocWithZone:(struct _NSZone *)zone \{ \if (_instace == nil) { \static dispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [super allocWithZone:zone]; \}); \} \return _instace; \} \\- (id)init \{ \static dispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [super init]; \}); \return _instace; \} \\+ (instancetype)shared<span style="background-color: rgb(255, 255, 204);">##</span></span><em><span style="font-family:SimHei;background-color: rgb(51, 255, 255);">methodName</span></em><span style="font-family:Comic Sans MS;"> \{ \return [[self alloc] init]; \} \+ (id)copyWithZone:(struct _NSZone *)zone \{ \return _instace; \} \\+ (id)mutableCopyWithZone:(struct _NSZone *)zone \{ \return _instace; \<span style="color:#ff0000;">}</span></span><span style="font-family: 'Comic Sans MS'; background-color: rgb(255, 204, 51);">#else // 不是ARC</span><span style="font-family:Comic Sans MS;">#define SingletonM(</span><span style="font-family:SimHei;"><span style="background-color: rgb(51, 255, 255);">methodName</span></span><span style="font-family:Comic Sans MS;">) \static id _instace = nil; \+ (id)allocWithZone:(struct _NSZone *)zone \{ \if (_instace == nil) { \static dispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [super allocWithZone:zone]; \}); \} \return _instace; \} \\- (id)init \{ \static dispatch_once_t onceToken; \dispatch_once(&onceToken, ^{ \_instace = [super init]; \}); \return _instace; \} \\+ (instancetype)shared<span style="background-color: rgb(255, 255, 204);">##</span></span><em><span style="font-family:SimHei;background-color: rgb(51, 255, 255);">methodName</span></em><span style="font-family:Comic Sans MS;"> \{ \return [[self alloc] init]; \} \\- (oneway void)release \{ \\} \\- (id)retain \{ \return self; \} \\- (NSUInteger)retainCount \{ \return 1; \} \+ (id)copyWithZone:(struct _NSZone *)zone \{ \    return _instace; \} \ \+ (id)mutableCopyWithZone:(struct _NSZone *)zone \{ \    return _instace; \<span style="color:#ff0000;">}</span><span style="background-color: rgb(255, 204, 51);"><em>#endif</em></span></span>


0 0
原创粉丝点击