国产探花免费观看_亚洲丰满少妇自慰呻吟_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!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁海县| 扬中市| 新田县| 海原县| 明溪县| 余姚市| 桦甸市| 阆中市| 兰溪市| 宕昌县| 徐汇区| 东乡族自治县| 全椒县| 东安县| 翁源县| 麻栗坡县| 朔州市| 瓮安县| 九寨沟县| 庆城县| 清徐县| 澄江县| 建平县| 克拉玛依市| 普兰店市| 巴青县| 朔州市| 永州市| 都兰县| 临沭县| 叶城县| 宁化县| 会昌县| 汉阴县| 裕民县| 景泰县| 咸阳市| 伊川县| 怀安县| 明水县| 寻甸|