麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

ARC和MRC兼容的單例模式

2019-11-14 19:23:16
字體:
來源:轉載
供稿:網友
一、ARC下的單例實現

  說明:在用戶實例化的方法控制單次執行,同時開放單例的初始化方法。

-(instancetype)init{    self=[super init];    if(self){        static dispatch_once_t onceToken;        dispatch_once(&onceToken, ^{        });    }    return self;    }static id instance; +(instancetype)allocWithZone:(struct _NSZone *)zone{     static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{     instance=[super allocWithZone:zone];     }); return instance;}   + (instancetype) shareAudio{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{     instance=[[self alloc]init];     });     return instance; }  +(id)copyWithZone:(struct _NSZone *)zone{     return instance;}
二、MRC下的單例實現

   說明:在用戶實例化的方法控制單次執行,同時開放單例的初始化方法,由于當前為MRC所以需要控制參內存管理的方法單次執行,因此相比ARC需要增加:

static id instance; +(instancetype)allocWithZone:(struct _NSZone *)zone{     static dispatch_once_t onceToken;     dispatch_once(&onceToken, ^{         instance=[super allocWithZone:zone];     });     return instance; }   + (instancetype) shareAudio{    static dispatch_once_t onceToken;     dispatch_once(&onceToken, ^{         instance=[[self alloc]init];     });     return instance; } -(oneway void)release{ }  -(instancetype)autorelease{     return instance; }  -(instancetype)retain{     return instance; }  -(NSUInteger)retainCount{     return 1; }
三、兼容MRC 和ARC的宏定義

   說明:為了方便后期的引用,可以將單例抽取為宏定義,鑒于抽取的時候考慮到當前的手動計數和自動計數因此引入條件編譯:

#if !__has_feature(objc_arc)======當前是ARC#else======當前是MRC#endif代碼:#define singleton_h(name)  + (instancetype) share##name;#if !__has_feature(objc_arc)#define singleton_m(name)/ static id instance;/+(instancetype)allocWithZone:(struct _NSZone *)zone{/    static dispatch_once_t onceToken;/    dispatch_once(&onceToken, ^{/        instance=[super allocWithZone:zone];/    });/    return instance;/}///+ (instancetype) share##name{/    static dispatch_once_t onceToken;/    dispatch_once(&onceToken, ^{/        instance=[[self alloc]init];/    });/    return instance;/}/-(oneway void)release{/}//-(instancetype)autorelease{/    return instance;/}//-(instancetype)retain{/    return instance;/}//+(id)copyWithZone:(struct _NSZone *)zone{/    return instance;/}/-(NSUInteger)retainCount{/    return 1;/}#else#define singleton_m(name)/static id instance;/+(instancetype)allocWithZone:(struct _NSZone *)zone{/  static dispatch_once_t onceToken;/  dispatch_once(&onceToken, ^{/  instance=[super allocWithZone:zone];/});/  return instance;/}///+ (instancetype) share##name{/  static dispatch_once_t onceToken;/  dispatch_once(&onceToken, ^{/   instance=[[self alloc]init];/  });/  return instance;/}//+(id)copyWithZone:(struct _NSZone *)zone{/   return instance;/}#endif
四、文件引用

1 在.h文件引用singleton_h(audio);

2 在.m文件引用singleton_m(audio);

 

作者:杰瑞教育
出處:http://www.companysz.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 羞羞网站视频 | 日日摸夜夜添夜夜添牛牛 | 久久久久久久久久久久久久av | 天天草天天干天天射 | 亚洲欧美国产精品va在线观看 | 水卜樱一区二区av | 99精品国产一区二区三区 | 亚洲欧美日韩在线 | 99精品视频久久精品视频 | 黄色高清免费 | 国产一国产精品一级毛片 | 精品国产一区二区在线观看 | 日本免费一区二区三区四区 | 欧美18videos性处按摩 | 毛片在线免费播放 | www.99re14.com| 香蕉秀 | www.777含羞草| 97伦理| 黄色大片免费看 | 黄色成人av在线 | 国产精品国产三级国产在线观看 | 欧美日韩综合视频 | 国产激情精品一区二区三区 | 久久精品国产精品亚洲 | 一区二区久久久久草草 | 13一14毛片免费看 | 羞羞视频免费观看入口 | 欧美成人午夜一区二区三区 | 激情97| 欧产日产国产精品乱噜噜 | 日本成人一二三区 | 久草在线视频看看 | 羞羞草视频 | 亚洲欧美不卡视频 | 欧产日产国产精品99 | 精品成人在线 | 7777视频 | 中韩毛片| 久草视频手机在线观看 | 精品国产一区二区三区久久久狼牙 |