美文网首页
OC宏定义实现单例设计模式

OC宏定义实现单例设计模式

作者: Jackson_Chan | 来源:发表于2017-05-13 16:36 被阅读0次

    单例设计模式是在开发中经常可以看到的一种设计模式,不管是在 Cocoa Touch框架还是我们自己的业务逻辑中都可以看到它的身影。

      1. 首先解答一个问题,什么是单例设计模式呢?
        它可以保证在我们的 App 里面某个类创建出来的对象有且仅有一个。
      1. 其次为什么要使用单例设计模式,直接创建对象不行么?
        1)这个要从单例设计模式的作用说起,在手持设备当中,内存的使用很多情况下都是要斤斤计较,单例设计模式可以保证在我们的 App 里面某个类创建出来的对象有且仅有一个,那么它的一个作用就是可以节省内存开销。
        2)如果我们的 App 有一份数据,整个 App 到处都有可能使用到这份数据(比如登录的用户信息),只需要使用同一份数据(保证大家访问的数据是相同的,一致的)。
        3)工具类一般都可以设计成单例设计模式。
    • 下面直接上代码
    #define JCSINGLETON_H(name) +(instancetype)share##name;
    
    #if __has_feature(objc_arc)
    //条件满足 ARC
    #define JCSINGLETON_M(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 JCSINGLETON_M(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
    
    

    相关文章

      网友评论

          本文标题:OC宏定义实现单例设计模式

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