objective里面的單例模式
在java程序中,最常用的就是單例模式,這個(gè)在objective-c一樣可以使用,但是和java還是有一點(diǎn)區(qū)別。
簡(jiǎn)單看一下java里面如何定義一個(gè)單例模式
public class SingletonClass {
private static SingletonClass instance = null;
private SingletonClass(){
}
public static final getInstance(){
synchorinzed(this){
if(instance == null){
instance = new SingletonClass();
}
return instance
}
}
}
在ios開(kāi)發(fā)中,還是有一點(diǎn)區(qū)別的。在objective-c中,對(duì)象都是可以通過(guò) [SingletonClass alloc]進(jìn)行內(nèi)存分配的,這樣就可以返回一個(gè)新的實(shí)例對(duì)象,并且alloc方法都是public的,沒(méi)有不讓類進(jìn)行調(diào)用,所以必須重寫alloc的方法。
一般情況下,alloc方法都是調(diào)用 +(id)allocWithZone:(Zone *) zone 進(jìn)行初始化的,所以只需要在 allicWithZone里面進(jìn)行初始化狀態(tài)的判斷即可
|
1
2
3
4
5
6
7
8
9
10
11
|
+(id) allocWithZone:(NSZone *)zone{if( instance == nil){instance = [super allocWithZone:zone ];}return instance;} |
在objective-c里面,alloc 方法是 負(fù)責(zé)給類的實(shí)例分配內(nèi)存地址,簡(jiǎn)單說(shuō),就是初始化實(shí)例成員的內(nèi)存地址,這個(gè)地址是根據(jù) 初始地址 + 偏移地址 來(lái)進(jìn)行計(jì)算的。其實(shí)在java里面,也會(huì)有這個(gè)過(guò)程,只不過(guò)java在靜態(tài)語(yǔ)言,在編譯成clas文件里面的時(shí)候,類里面的所有實(shí)例屬性都記錄在一個(gè) 變量表里面,一般是通過(guò)變量表 間接關(guān)聯(lián)到對(duì)應(yīng)的對(duì)應(yīng)的實(shí)際地址。而objective-c則是根據(jù)類屬性相對(duì)于基礎(chǔ)地址的偏移來(lái)進(jìn)行計(jì)算的
這個(gè)是比較好理解的 ,比如我們定義了一個(gè) int * p 一個(gè)指針,如果使用p[5],則是相對(duì)p這個(gè)指針指向的地址 + 2 *5 作為p[5] 的地址。
在alloc方法只是給實(shí)例變量分配內(nèi)存地址,并且將其retain計(jì)數(shù)增加1 ,這個(gè)時(shí)候?qū)τ谥羔樧兞浚涞刂分赶虻闹刀歼€是nil的,想要初始化,則是通過(guò) init開(kāi)頭的方法進(jìn)行初始化的。在objective-c里面,分配地址和初始化是分開(kāi)進(jìn)行的,java里面的 new 關(guān)鍵字包括分配地址 加 初始化的過(guò)程,類似java里面的構(gòu)造函數(shù)。但是objective-c 都是公開(kāi)的,沒(méi)有java里面的私有構(gòu)造函數(shù)這個(gè)說(shuō)法。
14年互聯(lián)網(wǎng)技術(shù)、產(chǎn)品、運(yùn)營(yíng)經(jīng)驗(yàn),前支付寶技術(shù)專家,互金創(chuàng)業(yè)公司CTO,大令保事業(yè)部總經(jīng)理。
在互金領(lǐng)域有比較強(qiáng)的產(chǎn)品以及運(yùn)營(yíng)經(jīng)驗(yàn),尤其擅長(zhǎng)用戶增長(zhǎng)、轉(zhuǎn)化、運(yùn)營(yíng)上的經(jīng)驗(yàn),兼具技術(shù)、產(chǎn)品、運(yùn)營(yíng)思維。
目前是云貓?jiān)鲩L(zhǎng)實(shí)驗(yàn)室 創(chuàng)始人
團(tuán)隊(duì)成員來(lái)自阿里等國(guó)內(nèi)知名互聯(lián)網(wǎng)公司,曾在互聯(lián)網(wǎng)金融、互聯(lián)網(wǎng)保險(xiǎn)、企業(yè)級(jí)SaaS等項(xiàng)目中負(fù)責(zé)用戶增長(zhǎng),團(tuán)隊(duì)管理的工作,擁有豐富的一線流量增長(zhǎng)經(jīng)驗(yàn)與實(shí)操手段。
歡迎關(guān)注我們,用技術(shù)驅(qū)動(dòng)增長(zhǎng)
浙公網(wǎng)安備 33010602011771號(hào)