2011-05-31 116 views
1

從不同類訪問ivars的首選方法是什麼?iOS Objective-C從不同類訪問ivars

應用程序委託類

說我希望訪問來自應用程序委託類根控制器(@synthesized如rootController)在另一個UIViewController類。我讀過某處,您從Application Delegate類訪問ivars的方式與訪問其他ivars的方式不同。

隨班就讀

如果我要訪問一些高德從讓說,另一個UIViewController類。我想訪問包含類A的名稱(@synthesized作爲名稱)的列表(NSArray)的ivar,並從類B獲得對它們的訪問權限。

ivars具有默認訪問權限(受保護)。

也許你可以點我一個很好的教程來解釋如何訪問ivars。

回答

1

應用程序委託是一個單身,所以你可以從任何地方訪問這些屬性。

在'正常'類的情況下,假設你不想使它成爲一個單例,你通常會使用委託模式。這意味着類A成爲類B的委託,而類B可以調用類A將實現的方法,這就是UITableViews如何與數據源委託一起工作。

這隻適用於你只需要從另一個類訪問這些屬性的情況(委託人不支持多委託沒有一點嘮叨),否則我會將數據封裝在任何類可以訪問的模型中。

0

我認爲你需要在這裏的概念是聲明的屬性:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17

您似乎已經在使用它(與@synthesize)。

ivars需要從類的外部訪問getter和setter。通過使用屬性,這些getters/setter可以通過@synthesized自動實現。

對於應用程序委託,我不明白:你想通過應用程序委託從UIViewController訪問另一個控制器嗎?

1

如果我正確理解你的問題,你將需要牢牢掌握Model-View-Controller模式(順便說一下,這在iOS中是無處不在的)。

基本上,你應該區分你的視圖和你的控制器 - 這在iOS中非常「自然」,因爲它是由框架強制執行的 - 而且在控制器/視圖和你的模型之間也是如此,數據,在你的情況下,名單的名單。控制器訪問模型並對其進行修改,並調解對視圖的訪問。

該模型應該在某種程度上被分解出來 - 比如,在它自己的類中 - 爲了允許模塊化和低依賴性。在一個特定的設計中(並不意味着它對你來說是最好的或者更合適的),Model可以是一個Singleton,所以你可以很容易地從其他對象訪問它。

你會明白,一個有效的模型必須正確設計,但這是要走的路。

檢查this tutorial以及此S.O. topic