利用GCD实现单利模式的宏代码

以下是.h文件,使用时,直接在需要实现单例模式的类中导入头文件即可。

// .h文件
#define DenglSingletonH(name) + (instancetype)shared##name;

// .m文件
#define DenglSingletonM(name) 
static id _instance; 
 
+ (instancetype)allocWithZone:(struct _NSZone *)zone 
{ 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
        _instance = [super allocWithZone:zone]; 
    }); 
    return _instance; 
} 
 
+ (instancetype)shared##name 
{ 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
        _instance = [[self alloc] init]; 
    }); 
    return _instance; 
} 
 
- (id)copyWithZone:(NSZone *)zone 
{ 
    return _instance; 
}

使用方法:

1.在.h中导入头文件名称

2.在.h文件中,DenglSingletonH(ObjectName)

3.在.m文件中,DenglSingletonM(ObjectName)

原文地址:https://www.cnblogs.com/iOSDeng/p/5454193.html