美文网首页iosiOS
iOS单例--宏定义

iOS单例--宏定义

作者: Dosun | 来源:发表于2017-03-23 14:43 被阅读600次

    如下是单例,是一个宏。这样只有工程中用到单例直接用此宏创建,大大节约时间。

    #define singleH(name) +(instancetype)share##name;
    
    #if __has_feature(objc_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
    #define singleM static id _instance;\
    +(instancetype)allocWithZone:(struct _NSZone *)zone\
    {\
    static dispatch_once_t onceToken;\
    dispatch_once(&onceToken, ^{\
    _instance = [super allocWithZone:zone];\
    });\
    return _instance;\
    }\
    \
    +(instancetype)shareTools\
    {\
    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中声明单例,单例名是shareGDDataBase


    Snip20170323_21.png

    //在.m中实现单例,实现NSCopying,NSMutableCopying两个协议。


    Snip20170323_22.png

    完成上面的步骤,就可完美的使用单例了,感恩!!

    相关文章

      网友评论

        本文标题:iOS单例--宏定义

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