OC 单例实现

2. 在.h 文件遵循 <NSCopying,NSMutabalecopying>

 

3.定义宏,实现任意类型单单例

#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

  
4.使用 括号里的名字 自己定义,但是h和m文件要一样

在 .h文件

 在.m文件

原文地址:https://www.cnblogs.com/qingzZ/p/9258902.html