2012-01-06 108 views
-5
self.list = playList; 

- (id)init { 
    if (self = [super init]) { 
     [self createDemoData]; 
    } 
    return self; 
} 

static NSString *CellIdentifier = @"CellIdentifier"; 

你好,我仍然不知道什麼時候使用這兩個關鍵字,特別是靜態的。什麼時候使用靜態變量和自我關鍵字

+2

你試過Google嗎?我聽說這樣做非常有效。 – Emil 2012-01-06 23:36:32

+3

你被低估了,因爲你問了一個關於兩個廣泛主題的非常模糊的問題。沒有辦法簡單回答這樣一個開放式問題。如果你編輯你的問題,並進一步澄清你的問題是什麼,你可能會得到更好的幫助。關於自我和靜態(它們根本不相互關聯......)你無法理解的是什麼? – 2012-01-06 23:52:37

回答

4

只是爲了你指出正確的方向:

靜態https://stackoverflow.com/a/1250088/267892

問題描述

  1. 您希望您的ClassA的有一個ClassB類變量。
  2. 您正在使用Objective-C作爲編程語言。
  3. Objective-C不像C++那樣支持類變量。

一個備選

模擬使用Objective-C類變量行爲設有

  1. 申報/所述classA.m內定義一個靜態變量所以這將是僅訪問classA方法(以及你把 放在classA.m中的所有東西)。

  2. 覆蓋NSObject的初始化類方法,初始化一個靜態變量與一個ClassB的實例。

  3. 你會想知道爲什麼要覆蓋NSObject的初始化方法。有關此方法的Apple文檔有 答案:「運行時恰好在該類之前發送一個程序 中的每個類的初始化或任何繼承 的類從程序中發送它的第一條消息。因此,如果不使用類,則永遠不會調用 方法。)「。

  4. 隨意使用任何ClassA類/實例方法中的靜態變量。

https://stackoverflow.com/a/2386015/267892

採用自主導致你的類的 「二傳手」,此變量被調用, 而不是直接改變了伊娃。

self.mainViewController = aController; 

等同於:

[self setMainViewController:aController]; 

在另一方面:

mainViewController = aController; 

只是直接改變mainViewController實例變量, 跳過可能被內置到 任何額外的代碼UIApplication的setMainViewController方法,比如釋放舊的 對象,保留新對象,upd處理內部變量等。

+0

它也很好地知道你可以保護你的實例變量,如果你聲明它們是私人的,只需在你的.h中定義你的屬性。在你的實現中,你將你的屬性定義爲讀寫。如果使用下劃線_Example編寫實例變量,並使用非下劃線屬性@synthesize示例= _Example進行合成,則可以實現更多保護。一個使用你的班級的人必須通過你的自定義setter和你的自定義getter,它提供了很多保護。順便說一句,封裝有更多的方法。比如僅在您的實現中聲明您的實例。 – 2012-01-07 00:33:25

相關問題