2013-03-17 45 views
2

在閱讀了Objective C中的屬性和ivars之後,我仍然與XCode中iOS的MasterDetail模板混淆。MasterDetail模板中的屬性和ivars

MasterViewController聲明屬性DetailViewController:

@class DetailViewController; 

@interface MasterViewController : UITableViewController 

@property (strong, nonatomic) DetailViewController *detailViewController; 

@end 

而伊娃的對象數組:

@interface MasterViewController() { 
    NSMutableArray *_objects; 
} 
@end 

爲什麼呀?我無法弄清楚爲什麼這兩件事情是以不同的方式宣佈的。 謝謝。

回答

2

聲明某些內容爲「property」可讓其他對象訪問並使用它。在上述情況下,將「detailViewController」作爲屬性添加到MasterViewController意味着其他對象可以訪問並使用屬性DetailViewController的方法&公開。

雖然「_objects」變量是MasterViewController的內部(或私有)變量。

+0

這是事實,但您也可以通過在實現文件中聲明私有屬性來聲明私有屬性,並且這通常優於Ivars。 – 2013-03-18 00:01:22

2

蘋果的文檔通常很好。蘋果的模板...有時會受到一些挑戰。隨着語言的改進(或者它們被不正確地更新),它們有時也很慢被更新。 objects數組應該確實是一個私有屬性,而不是實現聲明的ivar。無論如何,不​​要太多地閱讀這些內容。

請記住,視圖控制器甚至不應該保存數據;它應該從模型類中獲取(模板不提供)。其中一部分是爲了讓模板更簡單易用(它們實際上不是示例代碼;它們是模板)。一些奇怪的代碼是由於模板引擎的限制。 (他們以前不能用你的類名加前綴,即使他們告訴你必須加上你的類名前綴;這很煩人。)

不幸的是,看到示例代碼中的內容並不一定意味着它是一種正確的編碼方式。大部分Apple的示例代碼在生產代碼中都是完全不合適的(他們的大多數示例缺乏適當的模型類,或者無法正確處理錯誤)。但是,這又是一個示例代碼的性質。專注於coding guidelines。它們比從模板和示例中學習更有用。