国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

單例模式及其在iOS中的應用

2019-11-07 22:59:54
字體:
來源:轉載
供稿:網友

單例模式(Singleton Pattern) 確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例,這個類成為單例類,它提供全局訪問方法。

單例模式三要點:

某個類只能有一個實例它必須自行創建這個實例它必須自行向整個系統提供這個實例

使用場景:當一個系統要求只有一個實例時可使用單例模式。

iOS 單例的兩種寫法: 第一種:

//1.設置成靜態全局變量static Setting *set = nil;+(Setting *)sharedSetting{ @synchronized(self){//2.保證線程安全 // 3.當對象不存在時,創建對象,第二次再調用方法的時候,由于set是靜態的,所以不為空,不會再重新創建對象 if (!set) { set = [[Setting alloc]init]; } } //返回自己 return set;}//這個方法是在調用alloc方法時,alloc內部實際調用的創建對象的方法//我們重寫這個方法,保證在這個方法的內部創建的對象就是set對象即可+(id)allocWithZone:(struct _NSZone *)zone{ @synchronized(self){ if (!set) { set = [super allocWithZone:zone]; } } return set;}

第二種:

+ (id)sharedSetting{ static Setting *setting = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ setting = [[self alloc] init]; }); return setting;}+(id)allocWithZone:(struct _NSZone *)zone{ static Setting *setting = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ setting = [super allocWithZone:zone]; }); return setting;}

以上兩種方法對于只用【shareSetting】類方法獲取的話【allocWithZone】方法創建實例是可以不重寫的,但是,為防止一不小心用alloc方法創建實例,座椅最好還是重寫一下。而且在實際中,為保證對象的絕對唯一,并不是只需重寫這一個方法,還有 copyWithZone 等

//注意:在實際中,若想保證對象的絕對唯一,并不是只需重寫這一個方法,還有 copyWithZone 等//實現這個方法的類- (id)copyWithZone:(nullable NSZone *)zone{ return self;}- (id)mutableCopyWithZone:(nullable NSZone *)zone{ return self;}

結果展示一下: 這里寫圖片描述

其中要想對copyWithZone方法進行進一步了解的點這里

如有不當,歡迎指正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石门县| 罗源县| 泸溪县| 罗田县| 太和县| 永昌县| 信宜市| 梧州市| 柯坪县| 龙江县| 霞浦县| 老河口市| 海原县| 晋城| 大兴区| 安达市| 清苑县| 渝中区| 镇巴县| 遵义市| 曲阜市| 文成县| 九龙城区| 井陉县| 隆回县| 屏东县| 盐亭县| 拜城县| 潼关县| 南京市| 平泉县| 石景山区| 綦江县| 汝城县| 呼和浩特市| 曲松县| 嵊州市| 镇赉县| 衡山县| 长武县| 罗江县|