首页 > 学院 > 开发设计 > 正文

ARC和MRC实现单例模式

2019-11-14 18:33:13
字体:
来源:转载
供稿:网友

代码如下,可直接拷贝到头文件中

#define singleton_h(name) +(instancetype)shared##name# if __has_feature(objc_arc) //ARC#define singleton_m(name) /static id _instance;/+(id)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:(struct _NSZone *)zone/{/    return _instance;/}#else //非ARC#define singleton_m(name) /static id _instance;/+(id)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:(struct _NSZone *)zone/{/return _instance;/}/-(oneway void)release/{/    /}/-(instancetype)autorelease/{/    return _instance;/}/-(instancetype)retain/{/    return _instance;/}/-(NSUInteger)retainCount/{/    return 1;/}#endif

MRC要重写四个方法:

-(oneway void)release

{   

}

-(instancetype)autorelease

{

    return self;

}

-(instancetype)retain{

    

    return self;

}

-(NSUInteger)retainCount{

    return 1;

}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表