码迷,mamicode.com
首页 > 移动开发 > 详细

ios单例模式

时间:2015-04-07 15:09:20      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

  单例:整个程序中只有一个实例,不论创建多少次,引用的都是同一个内存地址

  以下是其实现方法,只要拷贝就可以直接用了(自己创建一个.h头文件,拷贝进去,调用的话在.h文件使用WYSSingletonH(这里写你的类名),然后在.m文件中调用WYSSingletonM(这里写你得类名),这里包括了ARC和MRC的实现):

// .h文件
#define WYSSingletonH(name)  +(instancetype)shared##name;

// .m文件
#if __has_feature(objc_arc)

    #define WYSSingletonM(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 WYSSingletonM(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

 

ios单例模式

标签:

原文地址:http://www.cnblogs.com/GeekStar/p/4398135.html

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