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

单例设计模式是在开发中经常可以看到的一种设计模式,不管是在 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宏定义实现单例设计模式)