1234567891011121314151617181920212223242526 |
- // .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; \
- }
|