单例类有个三步走。。。会写,但忘了怎么说了。
在非arc中还要重写retein,relese,alloc,retainCount等方法。
当然现在做项目都用arc了,把单例类抽成宏更方便。
代码如下:
// .h
#define single_interface(class) + (class *)shared##class;
// .m
// \ 代表下一行也属于宏
// ## 是分隔符
#define single_implementation(class) \
static class *_instance; \
\
+ (class *)shared##class \
{ \
if (_instance == nil) { \
_instance = [[self alloc] init]; \
} \
return _instance; \
} \
\
+ (id)allocWithZone:(NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
}
MJ老师的代码,非常好用,珍藏!
使用时:
single_interface(AccountTool)
single_implementation(AccountTool)