美文网首页
iOS 单例通用宏(备忘)

iOS 单例通用宏(备忘)

作者: 折颜乀 | 来源:发表于2017-03-02 16:37 被阅读2次

    #define SingleH(name) +(instancetype)share##name;

    #if __has_feature(objc_arc)

    //条件满足ARC

    #define SingleM(name) static id _instance;\

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

    {\

    static dispatch_once_t onceToken;\

    dispatch_once(&onceToken, ^{\

    _instance = [super allocWithZone:zone];\

    });\

    \

    return _instance;\

    }\

    \

    +(instancetype)share##name\

    {\

    return [[self alloc]init];\

    }\

    \

    -(id)copyWithZone:(NSZone *)zone\

    {\

    return _instance;\

    }\

    \

    -(id)mutableCopyWithZone:(NSZone *)zone\

    {\

    return _instance;\

    }

    #else

    //MRC

    #define SingleM(name) static id _instance;\

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

    {\

    static dispatch_once_t onceToken;\

    dispatch_once(&onceToken, ^{\

    _instance = [super allocWithZone:zone];\

    });\

    \

    return _instance;\

    }\

    \

    +(instancetype)share##name\

    {\

    return [[self alloc]init];\

    }\

    \

    -(id)copyWithZone:(NSZone *)zone\

    {\

    return _instance;\

    }\

    \

    -(id)mutableCopyWithZone:(NSZone *)zone\

    {\

    return _instance;\

    }\

    -(oneway void)release\

    {\

    }\

    \

    -(instancetype)retain\

    {\

    return _instance;\

    }\

    \

    -(NSUInteger)retainCount\

    {\

    return MAXFLOAT;\

    }

    #endif

    .H文件  使用  

    SingleH(name)

    .M文件使用

    SingleM(name)

    相关文章

      网友评论

          本文标题:iOS 单例通用宏(备忘)

          本文链接:https://www.haomeiwen.com/subject/zjlkgttx.html