用宏封装单例

<pre>#define SingletoH(methodName) +(instancetype)shared##methodName;//.h文件里实现

//.m文件里面实现

if __has_feature(objc_arc)//ARC情况下

define SingletoM(methodName) \

static __strong id _instace=nil;\

  • (instancetype)allocWithZone:(struct _NSZone *)zone
    {
    if (_instace==nil) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    _instace=[super allocWithZone:zone];
    });
    }
    return _instace;
    }\
  • (instancetype)init
    {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    _instace = [super init];
    });
    return _instace;
    }\
  • (instancetype)shared##methodName
    {
    return [[self alloc] init];
    }

else//非ARC情况下

define SingletoM(methodName) \

static id *_instace=nil;\

  • (instancetype)allocWithZone:(struct _NSZone *)zone
    {
    if (_instace==nil) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    _instace=[super allocWithZone:zone];
    });
    }
    return _instace;
    }\
  • (instancetype)init
    {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    _instace = [super init];
    });
    return _instace;
    }\
  • (instancetype)shared##methodName
    {
    return [[self alloc] init];
    }\
  • (oneway void)release
    {
    }\
  • (instancetype)retain
    {
    return self;
    }\
  • (NSUInteger)retainCount
    {
    return 1;
    }

endif

</pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容