設計模式
設計模式分為三大類:創建型、結構型、行為型
在Java中有24中設計模式
創建型:單例
1、為什么用單例模式?
OC的編程習慣(Java編程習慣、Swift編程習慣)
xcode4.2之前是MRC(手動分配和釋放內存)alloc:開辟內存、release:釋放內存
開發者有時候就容易忽略釋放問題
xcode4.2之后ARC(自動引用計數)---
由于alloc init在代碼中到處出現,但是對象不會馬上就釋放,只在沒有引用指向的時候就釋放
,這樣導致由于沒有及時釋放而產生的OOM(內存溢出)
在整個程序中為了避免創建多個對象,就引入了單例
iOS系統中使用場景
UIApplication:單例
NSNotificationCenter:單例模式,但是不是最為標準單例
NSFileManager:單例模式
NSUserDefaults:單例模式
NSURLCache:單例模式
2、單例模式的使用?
2.1 單例模式的特點
1、有且只有一個實例(全局唯一)
2、必須自行創建一個實例
3、必須提供一個全局實例(公開的方法),讓其暴露給外部使用
2.2 單例模式的角色劃分
角色:單例類、客戶端(使用者)
2.3 單例模式-約束
約束1: 提供一個靜態實例,一般情況喜愛設置為nil(在swift、Java中也是如此)
約束2: 提供一個方法創建單例,如果單例存在就返回,如果不存在就創建
約束3: 在OC里面需要重寫父類的中allocWithZone方法,保證初始化的時候是一個單例,當我們在調用alloc的時候回調該方法
約束4: OC需要重寫父類copyWithZone.....(在swift中你要將構造方法私有化,在Java中也是需要構造方法私有化)
3、 單例的實現
-
實現OC-單例模式
以下2個方式為懶漢式(等需要的是創建)
1、標準單例(非線程安全)-------------------------------
2、標準單例GCD(線程安全)-------------------------------
餓漢式(不管你要不要我都進行創建)
3、實現
注意:load方法(當程序運行的時候,回調該方法)一般不會用這個方法
4、@synchronized實現
-
實現Swift-單例模式
—————————————————————————————————
1、標準的單例(單例是不能夠被繼承的,在swift中可以用final關鍵字修飾-非線程安全
2、靜態屬性實例化寫法-線程安全
3、結構體方法實現單例-線程安全
-
實現Java-單例模式
—————————————————————————————————
1、標準單例-非線程安全
2、標準單例-線程安全
3、枚舉定義單例(這屬于java的高級編程)
4、......