2012-11-22 53 views
1

Objective-C和iOS開發的新品(從C背景開始)。我正在使用標籤欄控制器並使用多個視圖來編寫應用程序。我想在應用程序啓動時初始化一個對象,然後讓該實例可用於所有視圖。如何在Objective-C(iOS 6應用程序)中全局使用實例?

目前在我的AppDelegate.m,我有:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions 
{ 
    id myObject; 
    myObject = [[MYObject alloc] init]; 

    return YES; 
} 

如何訪問myObject的爲我其他視圖控制器?

謝謝! (和原諒新手問題)

回答

0

有很多的可能性。 只需在任何類實現之外聲明對象,就像在純C中一樣。或者您可以使用單例類作爲所有全局數據的存儲。

1

正如其他人所建議的,有許多選擇:

Singleton模式:

+ (id)sharedFoo { 
    static dispatch_once_t pred; 
    static FooClass *cSharedInstance = nil; 

    dispatch_once(&pred, ^{ cSharedInstance = [[super alloc] init]; }); 
    return cSharedInstance; 
} 

...和訪問對象[Foo sharedFoo]始終。一些開發者避開單身人士課程,因爲它可能會造成不僅僅是一個「上帝階級」,而是當開發人員意識到越來越多的對象需要成爲全球性的時候,這些類別的萬神殿。這種衝動常常與對應用程序設計的不完全思考有關。單例想法的變體使用單例來保存對所有全局數據的引用,例如[MyApplicationData sharedData] ...就我個人而言,我認爲它比使用UIApplication的代表爲此目的更清潔。

依賴注入:

由於正在使用一個UITabBarController設計,可以使用依賴注入(經由UITabBarControllerDelegate方法如tabBarController:didSelectViewController:)當用戶選擇一個選項卡以傳播對象,然後進一步傳播下來控制器層次結構。

申請委託作爲所有者:

像單例類,這可能製造過多的責任一類。 UIApplication委託人不僅負責應用程序生命週期,還負責各種其他狀態和行爲,這些狀態和行爲是不相關的。但是,這種模式在我看到的代碼中被廣泛使用。

相關問題