// .h
|
#define singleton_interface(class) + (instancetype)shared##class;
|
|
// .m
|
#define singleton_implementation(class) \
|
static class *_instance; \
|
\
|
+ (id)allocWithZone:(struct _NSZone *)zone \
|
{ \
|
static dispatch_once_t onceToken; \
|
dispatch_once(&onceToken, ^{ \
|
_instance = [super allocWithZone:zone]; \
|
}); \
|
\
|
return _instance; \
|
} \
|
\
|
+ (instancetype)shared##class \
|
{ \
|
if (_instance == nil) { \
|
_instance = [[class alloc] init]; \
|
} \
|
\
|
return _instance; \
|
}
|