2014-04-25 37 views
3

我想了解所有關於屬性的場景,大多數時候是自動創建一個ivar,當它不是。請告訴我,如果我在以下情況下正確:如果明確實施吸氣劑,伊娃是否仍然創建?

  1. 屬性是隱式讀寫。如果聲明瞭一個readwrite屬性,並且getter和setter是這兩個都明確實現,那麼確實會不會自動生成ivar?

  2. 說一個讀寫屬性聲明,而這一次只,吸氣明確實施。所述的ivar將被自動生成,因爲它會只要自動生成作爲屬性的兩個(getter或setter)中的一個是不明確實現。

  3. 基本上相同場景2,只是這次它是被明確地實施的設定器。伊娃將自動生成,因爲只要物業的兩個(吸氣劑或吸附劑)之一是而不是明確實施,它將自動生成。

而只是爲了澄清,當創建伊娃,將它總是有前面的下劃線「_」?

回答

1

您所有的陳述是正確的(假設你沒有明確提供@synthesize語句)。

參考:"Encapsulating Data"在「編程使用的Objective-C」文檔:

注:編譯器會自動在所有情況下合成一個實例變量 它也是合成至少一個訪問 方法。如果爲readwrite 屬性或readonly屬性的吸氣器同時實現吸氣劑和吸氣劑,編譯器將 假定您正在控制屬性實施 ,並且不會自動合成實例變量。

如果仍然 需要一個實例變量,則需要申請一個是 合成:

@synthesize property = _property; 
+0

如果一切都是自動完成的,什麼是有史以來做的「@」的點合成明確?像「@」綜合屬性= _屬性,如果這條線被遺漏了,它會發生呢? – user3451821

+0

@ user3451821:只有當你提供setter和getter *和*需要伊娃。 (你可以直接在'@ implementation'或類擴展中聲明伊娃,使用'@ synthesize'強調它與一個屬性有關。) - 可能有些情況下你希望伊娃擁有不同的名稱。 –

+0

@ user3451821:這是回答您的問題還是您需要更多信息? –