OC单例 模板封装

1. 单例抽宏  头文件

Singleton.h


//.h 文件的实现

#define SingletonH(methodName) +(instancetype)shared##methodName;



//.m 文件的实现

#if __has_feature(objc_arc)// ARC


#define SingletonM(methodName)\

static id _instance = nil;\

+(instancetype)allocWithZone:(struct _NSZone *)zone\

{\

if (_instance == nil) {\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super allocWithZone:zone];\

});\

}\

return _instance;\

} \

-(instancetype)init{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super init];\

});\

return _instance;\

}\

+(instancetype)shared##methodName{\

return [[self alloc] init];\

}\

+(id)copyWithZone:(struct _NSZone *)zone{\

    return _instance;\

}\

+(id)mutableCopyWithZone:(struct _NSZone *)zone{\

    return _instance;\

}


#else// MRC


#define SingletonM(methodName)\

static id _instance = nil;\

+(instancetype)allocWithZone:(struct _NSZone *)zone\

{\

if (_instance == nil) {\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super allocWithZone:zone];\

});\

}\

return _instance;\

} \

-(instancetype)init{\

static dispatch_once_t onceToken;\

dispatch_once(&onceToken, ^{\

_instance = [super init];\

});\

return _instance;\

}\

+(instancetype)shared##methodName{\

return [[self alloc] init];\

}\

\

-(oneway void)release{}\

-(instancetype)retain{return self;}\

-(NSUInteger)retainCount{return 1;}\

+(id)copyWithZone:(struct _NSZone *)zone{\

    return _instance;\

}\

+(id)mutableCopyWithZone:(struct _NSZone *)zone{\

    return _instance;\

}


#endif




2. 单例类的实现  

.h文件


#import "Singleton.h"


@interface LJSoundTool : NSObject


SingletonH(SoundTool);


@end


.m文件


#import "LJSoundTool.h"


@implementation LJSoundTool


SingletonM(SoundTool);


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值