#define SingletonInterface(name) +(instancetype)share##name
#if __has_feature(objc_arc)
// ARC
#define SingletonImplementation(name) \
+(instancetype)share##name \
{ \
return [[self alloc] init]; \
} \
+(instancetype)allocWithZone : (struct _NSZone *)zone \
{ \
static id instance; \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
instance = [super allocWithZone:zone]; \
}); \
return instance; \
} \
-(id)copyWithZone : (NSZone *)zone \
{ \
return self; \
} \
-(id)mutableCopyWithZone : (NSZone *)zone \
{ \
return self; \
}
#else
// MRC
#define SingletonImplementation(name) \
+(instancetype)share##name \
{ \
return [[self alloc] init]; \
} \
+(instancetype)allocWithZone : (struct _NSZone *)zone \
{ \
static id instance; \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
instance = [super allocWithZone:zone]; \
}); \
return instance; \
} \
-(id)copyWithZone : (NSZone *)zone \
{ \
return self; \
} \
-(id)mutableCopyWithZone : (NSZone *)zone \
{ \
return self; \
} \
-(oneway void)release{} - (instancetype)retain \
{ \
return self; \
} \
-(NSUInteger)retainCount \
{ \
return MAXFLOAT; \
}
#endif /* Singleton_h */
Singleton(宏单例写法)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- pragma mark 单例ARC和MRC写法 (Singleton) pragma mark 概念 pragm...
- Unity技术博客 - 单例的使用(单例的几种写法和一个实例)http://www.jianshu.com/p/1...