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

首頁 > 系統 > iOS > 正文

單例iOS

2019-11-06 10:05:19
字體:
來源:轉載
供稿:網友

為啥突然想寫這篇文章呢? 最近在做藍牙的項目,假如你有一個藍牙的程序已經執行了, 你在其他類也想用到這個程序 ,你還不能有兩個藍牙程序 這怎么辦呢, 這就得想到 單例。

在開發中經常會用到單例設計模式,目的就是為了在程序的整個生命周期內,只會創建一個類的實例對象,而且只要程序不被殺死,該實例對象就不會被釋放。下面我們來看看單例的概念、用途、如何創建,以便加深理解。

作用 在應用這個模式時,單例對象的類必須保證只有一個實例存在。許多時候整個系統只需要擁有一個的全局對象,這樣有利于我們協調系統整體的行為。比如在APP開發中我們可能在任何地方都要使用用戶的信息(想想你用過的NSUserDeafauts),那么可以在登錄的時候就把用戶信息存放在一個文件里面,這些配置數據由一個單例對象統一讀取,然后服務進程中的其他對象再通過這個單例對象獲取這些配置信息。這種方式簡化了在復雜環境下的配置管理。 單例之所以存在于整個應用程序,是因為他的指針存在于 靜態區 ,關于靜態區大家可以 看看內存分配的知識。

創建單例 單例的要求 是讓對象在程序里只創建一次 只創建一次的程序代碼 ,很容易讓我們想到 gcd 里面的 dispatch_once

GCD方式

static id _instance;+ (instancetype)allocWithZone:(struct _NSZone *)zone{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [super allocWithZone:zone];});return _instance;}+ (instancetype)sharedInstance{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{_instance = [[self alloc] init];});return _instance;}- (id)copyWithZone:(NSZone *)zone{return _instance;}- (id)mutableCopyWithZone:(NSZone *)zone {return _instance;}

來個老式的創建方式 舉一個蘋果官方文檔中的寫法。

static AccountManager *DefaultManager = nil; + (AccountManager *)defaultManager { if (!DefaultManager) DefaultManager = [[self allocWithZone:NULL] init]; return DefaultManager; }

當要使用的時候 你想到單例 會解決你很多困擾,fighting!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三门峡市| 荔浦县| 静宁县| 麻栗坡县| 东光县| 万宁市| 临桂县| 台中县| 双鸭山市| 渝中区| 旬阳县| 昂仁县| 高邑县| 深圳市| 云和县| 安顺市| 龙山县| 高青县| 措勤县| 井陉县| 安化县| 贡山| 德清县| 丹寨县| 抚宁县| 土默特左旗| 临夏市| 桃园县| 景洪市| 许昌县| 淮滨县| 双牌县| 栾城县| 津市市| 东至县| 自治县| 始兴县| 长兴县| 勃利县| 泰州市| 榆社县|