iOS 单例通用宏(备忘)

#define SingleH(name) +(instancetype)share##name;

#if __has_feature(objc_arc)

//条件满足ARC

#define SingleM(name) static id _instance;\

+(instancetype)allocWithZone:(struct _NSZone *)zone\

{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super allocWithZone:zone];\

});\

\

return _instance;\

}\

\

+(instancetype)share##name\

{\

return [[self alloc]init];\

}\

\

-(id)copyWithZone:(NSZone *)zone\

{\

return _instance;\

}\

\

-(id)mutableCopyWithZone:(NSZone *)zone\

{\

return _instance;\

}

#else

//MRC

#define SingleM(name) static id _instance;\

+(instancetype)allocWithZone:(struct _NSZone *)zone\

{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super allocWithZone:zone];\

});\

\

return _instance;\

}\

\

+(instancetype)share##name\

{\

return [[self alloc]init];\

}\

\

-(id)copyWithZone:(NSZone *)zone\

{\

return _instance;\

}\

\

-(id)mutableCopyWithZone:(NSZone *)zone\

{\

return _instance;\

}\

-(oneway void)release\

{\

}\

\

-(instancetype)retain\

{\

return _instance;\

}\

\

-(NSUInteger)retainCount\

{\

return MAXFLOAT;\

}

#endif



.H文件  使用  

SingleH(name)

.M文件使用

SingleM(name)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    不要重名就好阅读 3,544评论 0 0
  • 在开发中经常会用到单例设计模式,目的就是为了在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死...
    VincentHK阅读 3,882评论 0 3
  • 单例模式的作用:可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并...
    BEYOND黄阅读 2,256评论 0 3
  • 前段时间去到一个以前很要好的朋友那里差不多待了几天,一是因为确实是很久没见了,上一次见面差不多还是大1暑假接近尾期...
    林花逝阅读 11,545评论 4 3
  • 一生中,有人牵挂,是一种喜悦,是一份安暖的舒适;被人牵挂,是一种感动,是一种开心。牵挂的感觉,是寒冬里的一缕...
    f16116f271dd阅读 2,890评论 1 2