首页 > 移动平台 > 详细

ios oc单例宏定义

时间:2017-07-07 15:17:21      阅读:306      评论:0      收藏:0      [点我收藏+]

 

#undef AS_SINGLETON

#define AS_SINGLETON( __class ) \

- (__class *)sharedInstance; \

+ (__class *)sharedInstance;

#undef DEF_SINGLETON

#define DEF_SINGLETON( __class ) \

- (__class *)sharedInstance \

{ \

return [__class sharedInstance]; \

} \

+ (__class *)sharedInstance \

{ \

static dispatch_once_t once; \

static __class * __singleton__; \

dispatch_once( &once, ^{ __singleton__ = [[[self class] alloc] init]; } ); \

return __singleton__; \

} \

+ (instancetype)allocWithZone:(struct _NSZone *)zone \

{ \

static dispatch_once_t once; \

static __class * __singleton__; \

dispatch_once(&once, ^{ __singleton__ = [super allocWithZone:zone]; } ); \

return __singleton__; \

}

 

 

使用方法:在.h中声明AS_SINGLETON(__class)

      .m中声明DEF_SINGLETON(__class)

解释:为了防止别人不小心利用alloc/init方式创建示例,也为了防止别人故意为之,我们要保证不管用什么方式创建都只能是同一个实例对象,这就得重写allocWithZone;之前我是没有这个的,这是alloc init 和shareinstance创建的不是同一个

参考链接:http://www.cocoachina.com/ios/20160713/17017.html?ref=myread这个写的很详细

ios oc单例宏定义

原文:http://www.cnblogs.com/weicyNo-1/p/7131948.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!