iOS单例宏

//
//  Single.h
//  FKLTest
//
//  Created by kun on 16/8/11.
//  Copyright © 2016年 kun. All rights reserved.
//

#ifndef Single_h
#define Single_h

#define SingelH(name) +(instancetype)share##name;

#if __has_feature(objc_arc) // 条件编译 ARC
#define SingelM(name) static id share##name = nil;\
+ (instancetype)allocWithZone:(struct _NSZone *)zone\
{\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
if ( !share##name )\
{\
share##name = [super allocWithZone:zone];\
}\
});\
return share##name;\
}\
+ (instancetype)share##name\
{\
return [[self alloc] init];\
}\
- (id)copyWithZone:(NSZone *)zone\
{\
return share##name;\
}\
- (id)mutableCopyWithZone:(NSZone *)zone\
{\
return share##name;\
}
#else // 条件编译 MRC
#define SingelM(name) static id share##name = nil;\
+ (instancetype)allocWithZone:(struct _NSZone *)zone\
{\
static dispatch_once_t onceToken;\
dispatch_once(&onceToken, ^{\
if ( !share##name )\
{\
share##name = [super allocWithZone:zone];\
}\
});\
return share##name;\
}\
+ (instancetype)share##name\
{\
return [[self alloc] init];\
}\
- (id)copyWithZone:(NSZone *)zone\
{\
return share##name;\
}\
- (id)mutableCopyWithZone:(NSZone *)zone\
{\
return share##name;\
}\
- (oneway void)release\
{\
}\
- (instancetype)retain\
{\
    return shared##name;\
}\
- (NSUInteger)retainCount\
{\
    return MAXFLOAT;\
}
#endif // 条件编译

#endif /* Single_h */

 

posted on 2016-08-11 12:16  FKunLam  阅读(132)  评论(0编辑  收藏  举报