2013-10-24 68 views
3

我想創建一些類型的對象或類,該對象或類存儲從我的應用程序中某個點的服務器獲取的大量變量。然後,我想讓這個對象或類可用於整個項目,以便我可以使用或甚至更新此對象或類的變量。如何在Objective-c中爲所有其他類創建全局對象類

我不知道從哪裏開始,因爲我甚至不確定它是否可能。

目前我面臨的問題是,我有所有這些對象傳遞數據在不同的類周圍,我幾乎嵌套這些對象,並且它變得非常低效,以跟蹤此代碼。但是,如果我有一些類型的課程,我可以隨時隨地訪問所有的值,這將使我的生活變得更加輕鬆。

任何幫助或建議將非常感激。如果您需要更多信息,請告訴我。

+0

所有你需要做的就是創建一個類,它或者有一個靜態共享對象(類似於NSFileManager等)或者B)靜態方法。這些都是以'+'而不是'-'開始的方法。 – borrrden

+0

你正在尋找一個'singleton'。有大量的例子,你正在尋找的東西很容易找到與新的搜索關鍵字。 – nhgrif

+0

我真的很困惑的一件事是這個。假設我在A類中創建了這個objectZ,然後去B類,我怎樣才能找到或訪問objectZ而不創建它自己的新實例?或者是單身人士所覆蓋 – HurkNburkS

回答

3

您需要創建您通過這個訪問對象:正如評論說,這是一個單例模式

+ (MySingleton *)sharedMySingleton 
{ 
    static dispatch_once_t shared_initialized; 
    static MySingleton *shared_instance = nil; 

    dispatch_once(&shared_initialized,^{ 
    shared_instance = [[MySingleton alloc] init]; 
    }); 

    return shared_instance; 
} 

。當你第一次訪問你的對象時,它會被創建,然後每當你調用[MySingleton sharedMySingleton];

+0

你打敗了我.. –

+0

只有秒... –

+0

你們都得到了標記,但是這一個recives蜱..對不起,我不能給兩個蜱LOL謝謝我現在去執行這個。 – HurkNburkS

2

時你會得到同樣的對象。單身是一種選擇。

+(SharedClass *) sharedHelper { 
    static sharedClass *sharedInstance = nil; 
    static dispatch_once_t pred; 

    dispatch_once(&pred, ^{ 
     sharedInstance = [sharedClass alloc]; 
     sharedInstance = [sharedInstance init]; 
    }); 
    return sharedInstance; 
} 
2

我會建議創建一個數據容器單例。單身人士是一個在項目生命週期中只創建一次的對象。它有一個可以讓你請求對象的類方法。

搜索「可可單身設計模式」以查找更多關於它的信息。

您可能有一個類MyDataObject,它可能有一個類方法sharedDataObject。 .m文件的內容可能如下所示:

@implementation MyDataObject 
static _sharedDataObject; 

+(MyDataObject) sharedDataObject 
{ 
    if (!_sharedDataObject) 
    _sharedDataObject = [[MyDataObject alloc] init]; 
    return _sharedDataObject; 
} 

@end 

然後,您只需根據需要向數據對象的標頭中添加屬性即可。任何你需要它,#進口在你其他類的數據對象的頭部,然後用這樣的代碼:

//To store a value to a property in the shared data object: 
[MyDataObject sharedDataObject].someProperty = someValue; 

//To fetch a value: 
someValue = [MyDataObject sharedDataObject].someProperty; 

如果需要共享數據的內容對象堅持,可以使共享數據對象符合NSCoding,然後在應用程序切換到後臺時將其內容保存到文件中,並在啓動時從文件加載其內容。

請注意,可可和可可觸摸使用了很多單身物件。 NSUserDefaults是一個單例,NSFileManager也是。單例的提示是使用類方法返回單個對象。通常在Apple的框架中,類方法的名稱將以「共享」或「默認」開頭

+1

哦phooie。我花了很長時間來撰寫我的信息,其他人打我。其他海報甚至包括線程安全使用dispatch_once。查看他們的帖子。 –

0

對於不與其他單例進行交互的對象,在程序中創建一個單例對象是一種很好的模式。 如果您有許多具有複雜性交互的單體對象,則應該更好地控制對象的創建。 您可以使用您的AppDelegate,並在ApplicationDidFinishLaunching中創建Singleton作爲您的AppDelegate的字段。 或者您可以創建一個Singleton對象,該對象將包含其他對象,並將創建具有必要邏輯的其他對象。