iOs开发 单例模式 省懒宏

#define singleton_h(name) + (instancetype)shared##name;

#if __has_feature(obj_arc)
#define singleton_m(name)
static id _instance;
+ (instancetype)shared##name
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [super allocWithZone:zone];
});
return _instance;
}
+ (id)copyWithZone:(struct _NSZone *)zone
{
return _instance;
}

#else
#define singleton_m(name)
static id _instance;
+ (instancetype)shared##name
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [[self alloc] init];
    });
    return _instance;
}
+ (id)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _instance = [super allocWithZone:zone];
    });
    return _instance;
}
+ (id)copyWithZone:(struct _NSZone *)zone
{
    return _instance;
}

- (oneway void)release
{
}
- (id)autorelease
{
    return _instance;
}
- (id)retain
{
    return _instance;
}
- (NSUInteger)retainCount
{
    return 1;
}
#endif
原文地址:https://www.cnblogs.com/dyf520/p/3809302.html