我有一個自定義的NSObject
類,我的數組用於我的數據,我想使用等等。但我怎麼可以分配和初始化這個類的對象,並使用它到處都沒有使用:CustomClass class = [[CustomClass alloc] init];
,因爲這會每次從我的課程中創建一個對象,所以數據完全關閉。分配和初始化類一次,並使用它
我總是會得到關於如何處理一個在內存中說的類的東西,但沒有關於如何處理一個在內存中說的類,而且每次都可以使用,而不需要通過所有其他類來創建新的類。
我有一個自定義的NSObject
類,我的數組用於我的數據,我想使用等等。但我怎麼可以分配和初始化這個類的對象,並使用它到處都沒有使用:CustomClass class = [[CustomClass alloc] init];
,因爲這會每次從我的課程中創建一個對象,所以數據完全關閉。分配和初始化類一次,並使用它
我總是會得到關於如何處理一個在內存中說的類的東西,但沒有關於如何處理一個在內存中說的類,而且每次都可以使用,而不需要通過所有其他類來創建新的類。
閱讀關於單身人士或共享實例。這裏是目前最商定版本:
+ (MyClass *)sharedInstance {
static MyClass *sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{
sharedInstance=[[MyClass alloc]init];
});
return sharedInstance;
}
現在MyClass.sharedInstance
(或[MyClass sharedInstance]
舊語法)會給你類的單個共享實例。這個東西是爲了讓它線程安全。顯然你需要用你的班級的名字替換MyClass
。
您需要按照此答案中的解釋使用單例模式Correct Singleton Pattern Objective C (iOS)? 只有一個類的實例可以運行,並且可以在整個代碼中使用。
該代碼顯着過時,不應複製。 Gerd的代碼工作非常好,可靠。並不適用於ARC,這正是每個人現在使用的。 – gnasher729
很多人喜歡只爲* properties *使用「點語法」(但有不同意見),但我不會調用'[MyClass sharedInstance]'「舊語法」。 –
是的,很明顯,我需要更改「MyClass」的名稱哈哈,謝謝你的信息!更多地閱讀這些東西! – Kets
@Martin R:是。但它的輸入更少,閱讀速度也更快,所以我也越來越多地使用它來處理類似的情況。儘管我沒有強烈的偏好。 –