我有疑問。它對我來說並不明顯。Objective-C命名約定 - 澄清
比方說,我們有一個@特性命名爲myProperty在類中。綜合它時我們可以做兩件事。或者我們可以指定一個伊娃,說_someIVar,給它,或者我們可以只是簡單地忽略它在這種情況下,編譯器負責使用相同的名稱創建一個伊娃的,myProperty的,該屬性。在第一種情況下,我們可以使用ivar_someivar進入酒店。在第二種情況下,我們可以使用伊娃這是由編譯器爲我們創造myProperty的。
現在我的疑問是,當我們從一個視圖控制器,它已經在導航堆棧,我們使用,
[self.navigationController pushViewController:newViewController animated:YES];
由於navigationController是一個屬性推另一個視圖控制器,我認爲它應該分配給它一個ivar。只有兩種可能性。
1)首先是蘋果公司命名的ivars與前面的下劃線(_)。如果是這樣的話,我可以叫pushViewController:動畫:方法就是這樣,
[_navigationController pushViewController:newViewController animated:YES];
2)第二種可能性,顯然是沒有下劃線的伊娃,
[navigationController pushViewController:newViewController animated:YES];
但是,編譯不允許我以任何方式訪問navigationController。爲什麼?那是與私有財產有關的東西嗎?或者我根本不理解Objective-C?
爲什麼要這麼做?不要試圖打破封裝。實例變量是非常有原因的私有的。它們是實現細節,每次都可以更改。 – 2012-03-22 06:18:07