代码如下,可直接拷贝到头文件中
#define singleton_h(name) +(instancetype)shared##name# if __has_feature(objc_arc) //ARC#define singleton_m(name) /static id _instance;/+(id)allocWithZone:(struct _NSZone *)zone/{/ static dispatch_once_t onceToken;/ dispatch_once(&onceToken, ^{/ _instance = [super allocWithZone:zone];/ });/ return _instance;/}//+(instancetype)shared##name/{/ static dispatch_once_t onceToken;/ dispatch_once(&onceToken, ^{/ _instance = [[self alloc] init];/ });/ return _instance;/}//+(id)copyWithZone:(struct _NSZone *)zone/{/ return _instance;/}#else //非ARC#define singleton_m(name) /static id _instance;/+(id)allocWithZone:(struct _NSZone *)zone/{/static dispatch_once_t onceToken;/dispatch_once(&onceToken, ^{/_instance = [super allocWithZone:zone];/});/return _instance;/}//+(instancetype)shared##name/{/static dispatch_once_t onceToken;/dispatch_once(&onceToken, ^{/_instance = [[self alloc] init];/});/return _instance;/}//+(id)copyWithZone:(struct _NSZone *)zone/{/return _instance;/}/-(oneway void)release/{/ /}/-(instancetype)autorelease/{/ return _instance;/}/-(instancetype)retain/{/ return _instance;/}/-(NSUInteger)retainCount/{/ return 1;/}#endif
MRC要重写四个方法:
-(oneway void)release
{
}
-(instancetype)autorelease
{
return self;
}
-(instancetype)retain{
return self;
}
-(NSUInteger)retainCount{
return 1;
}
新闻热点
疑难解答