2012-04-14 90 views
1

我看到這樣的代碼:實例變量的目的是什麼?

@synthesize dataController = _dataController;

什麼是這個在視圖控制器的目的是什麼?

+1

看到這裏:http://stackoverflow.com/questions/2114587/iphone-ivar-naming-convention - 雖然看起來有點不同於你的問題。我也想知道爲什麼有些人同時也聲明瞭一個iVar,當你可以完美地使用該類中的屬性時... – allaire 2012-04-14 21:30:19

+0

對@ @ synthesize使用'=',可以讓你創建屬性名稱,與實際的iVar相同。在你的例子中,作者使用在私有變量之前放置'_'的樣式。然而,調用'[myClass _iVar]'看起來不如'[myClass iVar]'好,所以把'@synthesize _dataController = dataController'允許'_dataController'作爲其他類的'dataController'來訪問,使它成爲一個更可讀性更強。 – wquist 2012-04-14 22:13:01

回答

2

如果你的類需要存儲值,它需要在內存中的某個位置存儲這些數據。一個實例變量爲你的類需要的數據保留內存。

讓我們假設你想爲一個字符串或int變量添加一個位置。您可以使用實例變量爲對象的生命週期保留該內存。每個對象都會爲其變量接收唯一的內存。

這很像一個C struct

struct t_something { 
    int a; int b; 
}; 

struct聲明瞭兩個字段(A和B)。每個值都可以被讀取和寫入,而且其大小足以容納其字段。

+0

謝謝,這有助於。 – Mattbettinson 2012-04-14 22:11:26

+0

@Mattbettinson不客氣 – justin 2012-04-14 23:16:52

0

有大量的信息在這裏: iPhone ivar naming convention

的另一件事要記住:

使用實例變量,而不是在你的類屬性繞過的財產實施任何副作用(保留,複製等),通常會自動發生。

如果您寫了一個您希望繞過的自定義屬性實現,這可能尤其重要。

0

我用它來快速訪問數據,屬性需要寫「自我」。之前,瓦爾斯沒有。

+0

你不必自己寫。如果沒有其他具有相同名稱的iVar,則訪問該屬性。 – allaire 2012-04-14 21:40:16

+0

是的,我忘了它,但我認爲這是非常非常糟糕的風格,不寫自我。與屬性。因此,在閱讀代碼時,我們有很好的能夠快速區分數據變量的屬性。 – faviomob 2012-04-14 21:56:49

+1

@allaire:是的,你這樣做。當你省略「self」時,你直接訪問ivar--如果你沒有指定ivar名稱,則使用同名的ivar。 – Chuck 2012-04-15 08:05:56

相關問題