在之前的一片文章中介紹了物件的拷貝相關知識:今天我們來看一下oc中的單例模式,單例模式在設計模式中用的可能是最多的一種了,而且也是最簡單的一種
實現單例模式有三個條件
1、類的構造方法是私有的
2、類提供乙個類方法用於產生物件
3、類中有乙個私有的自己物件
針對於這三個條件,oc中都是可以做到的
1、類的構造方法是私有的
我們只需要重寫allocwithzone方法,讓初始化操作只執行一次
2、類提供乙個類方法產生物件
這個可以直接定義乙個類方法
3、類中有乙個私有的自己物件
我們可以在.m檔案中定義乙個屬性即可
下面來看**:
adressbook.h
//
// adressbook.h
// 35_singleton
//// created by jiangwei on 14-10-13.
//#import //設計單利類的目的,限制這個類只能建立乙個物件
//構造方法為私有的
//儲存乙個全域性的static變數
@inte***ce adressbook : nsobject
+ (adressbook *)shareinstance;
@end
在.h檔案中提供了乙個類方法,用於產生物件的
adressbook.m
//
// adressbook.m
// 35_singleton
//// created by jiangwei on 14-10-13.
//#import "adressbook.h"
static adressbook *instance = nil;//不能讓外部訪問,同時放在靜態塊中的
@implementation adressbook
+ (adressbook *)shareinstance
return instance;
}//限制方法,類只能初始化一次
//alloc的時候呼叫
+ (id) allocwithzone:(struct _nszone *)zone
return instance;
}//拷貝方法
- (id)copywithzone:(nszone *)zone
//需要重寫release方法,不能讓其引用+1
- (id)retain
//需要重寫release方法,不能讓其引用-1
- (oneway void)release
- (id)autorelease
@end
我們定義了乙個static型別的物件
static adressbook *instance = nil;//不能讓外部訪問,同時放在靜態塊中的
提供乙個獲取單例項的類方法
+ (adressbook *)shareinstance
return instance;
}
重寫allocwithzone方法,讓初始化只做一次
//限制方法,類只能初始化一次
//alloc的時候呼叫
+ (id) allocwithzone:(struct _nszone *)zone
return instance;
}
還有其他方法也是需要重寫的
//拷貝方法
- (id)copywithzone:(nszone *)zone
//需要重寫release方法,不能讓其引用+1
- (id)retain
//需要重寫release方法,不能讓其引用-1
- (oneway void)release
- (id)autorelease
拷貝方法只能返回當前的單例項
retain和release方法不能進行引用的+1和-1操作
測試**
main.m
//
// main.m
// 35_singleton
//// created by jiangwei on 14-10-13.
//#import #import "adressbook.h"
//單利模式
int main(int argc, const char * argv)
return 0;
}
兩個指標指向的是同乙個物件
總結
這一篇文章主要介紹了oc中的單例模式,同時我們oc學習篇的系列章程也就結束了,當然這些並不代表oc中所有的內容,還有很多其他內容,我們只有後面慢慢的去使用他才會越來越了解。
iOS開發 OC篇 單例模式
回顧一下load和initialize方法,有幾點需要注意。load方法和initialize方法分析 1 load方法 1 當類被引用程序式的時候會執行這個函式 2 乙個類的load方法不用寫明 super load 父類就會收到呼叫,並且在子類之前。3 category的load也會收到呼叫,但...
oc單例模式
1 單例模式概念 1 什麼是單例模式 singleton 單例模式的意圖是是的類的物件成為系統中唯一的例項,提供乙個訪問點,供客戶類 共享資源。2 什麼情況下使用單例?1 類只能有乙個例項,而且必須從乙個為人熟知的訪問點對其進行訪問,比如工廠方法。2 這個唯一的例項只能通過子類化進行擴充套件,而且擴...
OC 單例模式
設計模式 用來解決某一特定問題 單例模式 什麼時候使用單例模式?在工程中,一些類只需要乙個例項變數,我們就可以將這些類設計成單例模式 單例模式的作用?當乙個類a被設計成單例模式時,由類a構造出的例項物件之於其他類來說為全域性例項物件,即在每乙個類中由類a構建的例項物件 都是同乙個物件 在oc中如何將...