2011-09-01 86 views
7

我一直在使用應用程序委託作爲「全局存儲桶」來在各種視圖控制器之間共享數據。通常我做這樣的事情:iOS在視圖控制器中共享「全局數據」

My_AppDelegate *appDelegate = (My_AppDelegate *)[[UIApplication sharedApplication] delegate]; 

然後,我會堅持數據導入的appDelegate,並從另一個視圖控制器的appDelegate拿起數據。不知何故,這看起來笨拙和不恰當(儘管它確實有效)。

有沒有更好的方法?我可以在某種全球共享區域設置「監聽者」,如果有人在其中粘貼數據元素,另一個對象會得到一個「回調」讓其知道某人已經準備好了數據?

在Java中,我們用Observer/Observable類來做到這一點 - 也許有這樣的事情,或者更好的iOS?

回答

3

清潔程序雖然不一定是不同的,但可以創建單例類, AppData,您可以通過多種方式訪問​​,其中所有其他課程均可使用。它具有將應用程序特定的東西與應用程序委託的東西分開的好處。你可能會定義類是這樣的:

 
@interface AppData : NSObject 

// Perhaps you'll declare some class methods here... 

@end 

我做一個普通的事情是這樣的類定義類的方法訪問,例如,設置的值,或應用程序特定的常量或其他單一對象。有很多可能性。

最後,你可以用類方法做很多事情,你可以調用類似[AppData theMethod]的東西。請記住,沒有self在類方法中訪問。

更進一步,您可以爲AppData類定義ivars,然後管理AppData的單例實例。使用類方法,例如+sharedInstance,以得到你可以調用mehods的單身人士的句柄。例如,[[AppData sharedInstance] someMethod:myArgument]。你的+sharedInstance的實現可以是你管理單實例創建的地方,方法最終返回。

我不確定我是否稱這種方法爲「最佳實踐」,但我發現這種模式非常方便。

+0

是的,我忘了單身人士,我一直用它們在Java中,我會試試它.. – geekyaleks

相關問題