亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

Objective-C(iOS)嚴格單例模式正確實現

2019-11-14 18:10:56
字體:
來源:轉載
供稿:網友

注:本文所有權歸作者所有,轉載請注明出處  

  當希望在一個應用程序中某個類的對象只能存在一個的時候就可以考慮用單例模式來實現,單例模式在C++中比較容易實現(只需把構造函數聲明為PRivate),而在Objective-C中對象可以通過NSObject的alloc來產生,所以需要編寫一些額外的代碼來確保對象的唯一性,考慮到現在編寫iOS APP代碼幾乎都是ARC方式,且GCD也已經被用爛了,故本文給出一種利用GCD技術來實現嚴格單例模式的ARC版本,具體代碼如下所示,所有的注意點都寫在了注釋里面:

 1 Singleton.h 2 @interface Singleton : NSObject 3 @property(nonatomic,strong) NSString *name; 4 +(Singleton*)defaultManager; 5 @end 6  7  8 Singleton.m 9 @implementation Singleton10 //單例類的靜態實例對象,因對象需要唯一性,故只能是static類型11 static Singleton *defaultManager = nil;12 13 /**單例模式對外的唯一接口,用到的dispatch_once函數在一個應用程序內只會執行一次,且dispatch_once能確保線程安全14 */15 +(Singleton*)defaultManager16 {17     static dispatch_once_t token;18     dispatch_once(&token, ^{19         if(defaultManager == nil)20         {21             defaultManager = [[self alloc] init];22         }23     });24     return defaultManager;25 }26 27 /**覆蓋該方法主要確保當用戶通過[[Singleton alloc] init]創建對象時對象的唯一性,alloc方法會調用該方法,只不過zone參數默認為nil,因該類覆蓋了allocWithZone方法,所以只能通過其父類分配內存,即[super allocWithZone:zone]28  */29 +(id)allocWithZone:(struct _NSZone *)zone30 {31    static dispatch_once_t token;32     dispatch_once(&token, ^{33         if(defaultManager == nil)34         {35             defaultManager = [super allocWithZone:zone];36         }37     });38     return defaultManager;39 }40 //自定義初始化方法,本例中只有name這一屬性41 - (instancetype)init42 {43     self = [super init];44     if(self)45     {46         self.name = @"Singleton";47     }48     return self;49 }50 51 //覆蓋該方法主要確保當用戶通過copy方法產生對象時對象的唯一性52 - (id)copy53 {54     return self;55 }56 57 //覆蓋該方法主要確保當用戶通過mutableCopy方法產生對象時對象的唯一性58 - (id)mutableCopy59 {60     return self;61 }62 //自定義描述信息,用于log詳細打印63 - (NSString *)description64 {65     return [NSString stringWithFormat:@"memeory address:%p,property name:%@",self,self.name];66 }

測試代碼如下:

 1 Singleton *defaultManagerSingleton =[Singleton defaultManager]; 2 NSLog(@"defaultManagerSingleton:/n%@",defaultManagerSingleton); 3 Singleton *allocSingleton = [[Singleton alloc] init]; 4 NSLog(@"allocSingleton:/n%@",allocSingleton); 5 Singleton *copySingleton = [allocSingleton copy]; 6 NSLog(@"copySingleton:/n%@",copySingleton); 7 Singleton *mutebleCopySingleton = [allocSingleton mutableCopy]; 8 NSLog(@"mutebleCopySingleton:/n%@",mutebleCopySingleton); 9 10 //打印結果11 2015-10-11 21:48:34.722 Singleton[1941:214584] defaultManagerSingleton:12 memeory address:0x7fa6d1591530,property name:Singleton13 2015-10-11 21:48:34.727 Singleton[1941:214584] allocSingleton:14 memeory address:0x7fa6d1591530,property name:Singleton15 2015-10-11 21:48:34.727 Singleton[1941:214584] copySingleton:16 memeory address:0x7fa6d1591530,property name:Singleton17 2015-10-11 21:48:34.727 Singleton[1941:214584] mutebleCopySingleton:18 memeory address:0x7fa6d1591530,property name:Singleton

從打印結果來看通過 [Singleton defaultManager]、[[Singleton alloc] init]、[allocSingleton copy]、[allocSingleton mutableCopy]這四種方法生成的對象地址都是0x7fa6d1591530,即表明對象是同一個,也就實現了嚴格單例模式,加上GCD是線程安全的所以在多線程中也能保證對象的唯一性。

另:在學習Objective-C編寫單例模式時看到網上好多人都借用蘋果官方的實現方式,但我自己始終沒搜到官方的實現Sample代碼,如果你知道麻煩把網址給我發下,謝謝哈~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久人人爽亚洲精品天堂| 久久久999精品视频| 丁香五六月婷婷久久激情| 性欧美亚洲xxxx乳在线观看| 欧美极品少妇xxxxⅹ喷水| 欧美日韩美女在线| 欧美电影在线观看网站| 欧美日韩在线观看视频小说| 日韩美女免费视频| 国产精品久久久久久久久久久久久| 亚洲白拍色综合图区| 97人人做人人爱| 国产精品福利片| 久久69精品久久久久久久电影好| 国产亚洲成精品久久| 日韩av黄色在线观看| 国产精品久久中文| 日本欧美国产在线| 国产亚洲精品久久久久久牛牛| 538国产精品一区二区在线| 国产ts一区二区| 欧美激情亚洲国产| 中文字幕一精品亚洲无线一区| 成人中文字幕在线观看| 日韩成人在线视频观看| 亚洲激情小视频| 国语自产精品视频在线看| 57pao国产精品一区| 91精品国产91久久久久久吃药| 一区二区三区www| 久久久国产精品x99av| 欧美日韩国产成人在线| 久久久噜噜噜久久| 亚洲sss综合天堂久久| 久久亚洲一区二区三区四区五区高| 久久久中精品2020中文| 亚洲精品久久7777777| 亚洲日本aⅴ片在线观看香蕉| 国产日韩欧美在线看| 日韩av影片在线观看| 日韩中文av在线| 午夜精品一区二区三区在线视| 亚洲国语精品自产拍在线观看| 欧美一级黄色网| 日韩欧美中文字幕在线观看| 亚洲精品视频在线观看视频| 欧洲亚洲在线视频| 91影院在线免费观看视频| 九九视频这里只有精品| 51色欧美片视频在线观看| 欧美人与性动交a欧美精品| 91在线精品播放| 日韩精品视频免费专区在线播放| 国产精品久久二区| 日韩av在线高清| 一区二区欧美激情| 欧美精品免费播放| 日韩欧美高清视频| 狠狠色香婷婷久久亚洲精品| 久久免费视频在线| 日韩国产高清视频在线| 国语自产精品视频在免费| 欧美日韩美女视频| 永久免费精品影视网站| 成人国产精品免费视频| 午夜精品一区二区三区在线视频| 97热在线精品视频在线观看| 亚洲级视频在线观看免费1级| 亚洲天堂av高清| 亚洲mm色国产网站| 青青久久av北条麻妃黑人| 日韩在线播放一区| 欧美在线视频一区二区| 91久久精品日日躁夜夜躁国产| 91av在线看| 原创国产精品91| 国产欧美一区二区三区四区| 在线视频欧美性高潮| 另类视频在线观看| 91在线高清视频| 国内伊人久久久久久网站视频| 国产欧美日韩视频| 九九九热精品免费视频观看网站| 欧美一级大片在线免费观看| 精品亚洲一区二区三区在线观看| 国产在线视频不卡| 精品久久久视频| 亚洲全黄一级网站| 国产精品日韩欧美综合| 一区二区亚洲欧洲国产日韩| 日韩av黄色在线观看| 高跟丝袜一区二区三区| 欧美第一黄网免费网站| www.日本久久久久com.| 色伦专区97中文字幕| 高跟丝袜一区二区三区| 中文字幕久久久av一区| 久久99国产精品自在自在app| 日韩视频在线免费| 亚洲天堂男人天堂女人天堂| 久久国产精品99国产精| 国产精品亚洲第一区| 国产精品96久久久久久| 中文字幕亚洲欧美| 97精品在线观看| 黄色成人在线播放| 欧洲中文字幕国产精品| 国产午夜精品视频| 久久久999精品免费| 在线观看成人黄色| 国产欧美婷婷中文| 中文字幕久热精品在线视频| 免费不卡欧美自拍视频| 日韩精品一区二区三区第95| 亚洲伊人一本大道中文字幕| 久久精品99久久香蕉国产色戒| 91av视频在线免费观看| 日韩精品视频免费专区在线播放| 亚洲第一级黄色片| 91精品啪aⅴ在线观看国产| 中文字幕欧美在线| 中文字幕亚洲欧美一区二区三区| 久久精品一区中文字幕| 欧美性少妇18aaaa视频| 国产精品自产拍高潮在线观看| 久久91亚洲精品中文字幕| 久久91超碰青草是什么| 欧美性xxxxx极品| 在线成人中文字幕| 欧美激情精品久久久久久黑人| 久久久久久一区二区三区| 亚洲日本aⅴ片在线观看香蕉| 国产精品扒开腿做爽爽爽的视频| 欧美激情中文字幕乱码免费| 一区二区三欧美| 92看片淫黄大片欧美看国产片| 777国产偷窥盗摄精品视频| 色婷婷久久av| 亚洲国产精品久久91精品| 综合网日日天干夜夜久久| 日韩在线视频网站| 国产亚洲a∨片在线观看| 精品视频久久久久久| 久久久影视精品| 精品视频在线播放| 中文字幕在线看视频国产欧美在线看完整| 这里只有精品视频| 精品久久久av| 亚洲系列中文字幕| 中文字幕亚洲无线码在线一区| 国产精品视频一区国模私拍| 日本a级片电影一区二区| 日韩福利伦理影院免费| 欧美在线视频播放| 丝袜美腿精品国产二区| 国产精品一区二区久久精品| 亚洲天堂久久av| 精品香蕉一区二区三区| 国产精品久久久久福利| 亚洲伊人久久综合| 精品久久久久久国产91| 亚洲国产精品一区二区三区| 亚洲精品自拍视频| 日韩风俗一区 二区|