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

 

posted on 2014-06-26 06:39  风月灯  阅读(161)  评论(0编辑  收藏  举报