self.list = playList;
- (id)init {
if (self = [super init]) {
[self createDemoData];
}
return self;
}
static NSString *CellIdentifier = @"CellIdentifier";
你好,我仍然不知道什麼時候使用這兩個關鍵字,特別是靜態的。什麼時候使用靜態變量和自我關鍵字
self.list = playList;
- (id)init {
if (self = [super init]) {
[self createDemoData];
}
return self;
}
static NSString *CellIdentifier = @"CellIdentifier";
你好,我仍然不知道什麼時候使用這兩個關鍵字,特別是靜態的。什麼時候使用靜態變量和自我關鍵字
只是爲了你指出正確的方向:
靜態:https://stackoverflow.com/a/1250088/267892
問題描述:
- 您希望您的ClassA的有一個ClassB類變量。
- 您正在使用Objective-C作爲編程語言。
- Objective-C不像C++那樣支持類變量。
一個備選:
模擬使用Objective-C類變量行爲設有
申報/所述classA.m內定義一個靜態變量所以這將是僅訪問classA方法(以及你把 放在classA.m中的所有東西)。
覆蓋NSObject的初始化類方法,初始化一個靜態變量與一個ClassB的實例。
你會想知道爲什麼要覆蓋NSObject的初始化方法。有關此方法的Apple文檔有 答案:「運行時恰好在該類之前發送一個程序 中的每個類的初始化或任何繼承 的類從程序中發送它的第一條消息。因此,如果不使用類,則永遠不會調用 方法。)「。
隨意使用任何ClassA類/實例方法中的靜態變量。
自:https://stackoverflow.com/a/2386015/267892
採用自主導致你的類的 「二傳手」,此變量被調用, 而不是直接改變了伊娃。
self.mainViewController = aController;
等同於:
[self setMainViewController:aController];
在另一方面:
mainViewController = aController;
只是直接改變mainViewController實例變量, 跳過可能被內置到 任何額外的代碼UIApplication的setMainViewController方法,比如釋放舊的 對象,保留新對象,upd處理內部變量等。
它也很好地知道你可以保護你的實例變量,如果你聲明它們是私人的,只需在你的.h中定義你的屬性。在你的實現中,你將你的屬性定義爲讀寫。如果使用下劃線_Example編寫實例變量,並使用非下劃線屬性@synthesize示例= _Example進行合成,則可以實現更多保護。一個使用你的班級的人必須通過你的自定義setter和你的自定義getter,它提供了很多保護。順便說一句,封裝有更多的方法。比如僅在您的實現中聲明您的實例。 – 2012-01-07 00:33:25
你試過Google嗎?我聽說這樣做非常有效。 – Emil 2012-01-06 23:36:32
你被低估了,因爲你問了一個關於兩個廣泛主題的非常模糊的問題。沒有辦法簡單回答這樣一個開放式問題。如果你編輯你的問題,並進一步澄清你的問題是什麼,你可能會得到更好的幫助。關於自我和靜態(它們根本不相互關聯......)你無法理解的是什麼? – 2012-01-06 23:52:37