設(shè)計模式
設(shè)計模式分為三大類:創(chuàng)建型蒜田、結(jié)構(gòu)型、行為型
在Java中有24中設(shè)計模式
創(chuàng)建型:單例
1膜廊、為什么用單例模式乏沸?
OC的編程習慣(Java編程習慣、Swift編程習慣)
xcode4.2之前是MRC(手動分配和釋放內(nèi)存)alloc:開辟內(nèi)存爪瓜、release:釋放內(nèi)存
開發(fā)者有時候就容易忽略釋放問題
xcode4.2之后ARC(自動引用計數(shù))---
由于alloc init在代碼中到處出現(xiàn)蹬跃,但是對象不會馬上就釋放,只在沒有引用指向的時候就釋放
铆铆,這樣導(dǎo)致由于沒有及時釋放而產(chǎn)生的OOM(內(nèi)存溢出)
在整個程序中為了避免創(chuàng)建多個對象蝶缀,就引入了單例
iOS系統(tǒng)中使用場景
UIApplication:單例
NSNotificationCenter:單例模式,但是不是最為標準單例
NSFileManager:單例模式
NSUserDefaults:單例模式
NSURLCache:單例模式
2薄货、單例模式的使用翁都?
2.1 單例模式的特點
1、有且只有一個實例(全局唯一)
2谅猾、必須自行創(chuàng)建一個實例
3柄慰、必須提供一個全局實例(公開的方法)鳍悠,讓其暴露給外部使用
2.2 單例模式的角色劃分
角色:單例類、客戶端(使用者)
2.3 單例模式-約束
約束1: 提供一個靜態(tài)實例坐搔,一般情況喜愛設(shè)置為nil(在swift贼涩、Java中也是如此)
約束2: 提供一個方法創(chuàng)建單例,如果單例存在就返回薯蝎,如果不存在就創(chuàng)建
約束3: 在OC里面需要重寫父類的中allocWithZone方法遥倦,保證初始化的時候是一個單例,當我們在調(diào)用alloc的時候回調(diào)該方法
約束4: OC需要重寫父類copyWithZone.....(在swift中你要將構(gòu)造方法私有化占锯,在Java中也是需要構(gòu)造方法私有化)
3袒哥、 單例的實現(xiàn)
-
實現(xiàn)OC-單例模式
以下2個方式為懶漢式(等需要的是創(chuàng)建)
1、標準單例(非線程安全)-------------------------------
2消略、標準單例GCD(線程安全)-------------------------------
餓漢式(不管你要不要我都進行創(chuàng)建)
3堡称、實現(xiàn)
注意:load方法(當程序運行的時候,回調(diào)該方法)一般不會用這個方法
4艺演、@synchronized實現(xiàn)
-
實現(xiàn)Swift-單例模式
—————————————————————————————————
1却紧、標準的單例(單例是不能夠被繼承的,在swift中可以用final關(guān)鍵字修飾-非線程安全
2胎撤、靜態(tài)屬性實例化寫法-線程安全
3晓殊、結(jié)構(gòu)體方法實現(xiàn)單例-線程安全
-
實現(xiàn)Java-單例模式
—————————————————————————————————
1、標準單例-非線程安全
2伤提、標準單例-線程安全
3巫俺、枚舉定義單例(這屬于java的高級編程)
4、......