iOS單例模式(Singleton)
單例模式的意思就是:只有一個(gè)實(shí)例振亮;單例模式確保每個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。這個(gè)類稱為:單例類浮驳。
單例模式要點(diǎn)
要點(diǎn)有三個(gè):1、某個(gè)類只能有一個(gè)實(shí)例捞魁;2至会、這個(gè)類必須自行創(chuàng)建這個(gè)實(shí)例;3谱俭、這個(gè)類必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例奉件;
單例模式的優(yōu)點(diǎn)
1、實(shí)例控制:Singleton會阻止其他對象實(shí)例化自己的Singleton對象的副本旺上,從而保證所有對象都訪問唯一實(shí)例瓶蚂;
2、靈活性:因?yàn)轭惪刂屏藢?shí)例化過程宣吱,所以類可以更加靈活的修改實(shí)例化過程窃这;
在Objective-c中,要實(shí)現(xiàn)一個(gè)單例類征候,至少需要做以下4個(gè)步驟:
1杭攻、為單例對象實(shí)現(xiàn)一個(gè)靜態(tài)實(shí)例,并進(jìn)行初始化疤坝,最后設(shè)置為nil兆解;
2、實(shí)現(xiàn)一個(gè)實(shí)例構(gòu)造方法跑揉,檢查上面聲明的靜態(tài)實(shí)例是否為nil锅睛,如果是,則新建并返回一個(gè)本類的實(shí)例历谍;
3现拒、重寫allocWithZone方法,用來保證其他人直接使用alloc 和 init 試圖獲得一個(gè)新實(shí)例的時(shí)候不產(chǎn)生一個(gè)新實(shí)例望侈。
4印蔬、適當(dāng)實(shí)現(xiàn)allocWithZone, copyWithZone, release, autorelease.
iOS 系統(tǒng)的單例類(6個(gè)):
UIApplication(應(yīng)用程序?qū)嵗?br>
NSNotificationCenter(消息中心);
NSFileManager(文件管理) 脱衙;
NSUserDefaults (應(yīng)用程序設(shè)置)侥猬;
NSURLCache (請求緩存);
NSHTTPCookieStorage (應(yīng)用程序cookies池)捐韩;
但是:單例對象一旦建立退唠,對象指針是保存在靜態(tài)區(qū)的,單例對象是在堆中分配的內(nèi)存空間荤胁,只有在應(yīng)用程序終止后才會被釋放掉铜邮;只有在確實(shí)需要唯一使用的對象才會考慮單例模式,不要濫用單例。