在项目中,我们需要全局只有一个实例,节省不必要的内存,这时我们就需要使用单例生成对象。
这时把单例的代码封装成宏,就能方便我们下次使用了。
在.h .m里直接导入头文件,调用 传入类名即可!
singleton_interface(DataManager)
singleton_implementation(DataManager)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 // .h 2 #define singleton_interface(className) + (instancetype)shared##className; 3 4 // .m 5 // 最后一句不要斜线 6 #define singleton_implementation(className) \ 7 static className *_instace; \ 8 \ 9 + (id)allocWithZone:(struct _NSZone *)zone \ 10 { \ 11 static dispatch_once_t onceToken; \ 12 dispatch_once(&onceToken, ^{ \ 13 _instace = [super allocWithZone:zone]; \ 14 }); \ 15 \ 16 return _instace; \ 17 } \ 18 \ 19 + (instancetype)shared##className \ 20 { \ 21 if (_instace == nil) { \ 22 _instace = [[className alloc] init]; \ 23 } \ 24 \ 25 return _instace; \ 26 }