2012-03-03 66 views
-2

我有一個NSString *日期。我從互聯網獲取一些數據,現在我有這個變量的日期。我希望能夠在任何時候使用這個NSString,而無需調用在我的程序中的任何範圍內返回它的方法。單身人士目標C

我在哪裏可以將代碼從互聯網中檢索變量將保存的日期?它會在這裏嗎?然後我最終會使date = sharedInstance?

static SingletonClass *sharedInstance = nil; 

// Get the shared instance and create it if necessary. 
+ (SingletonClass *)sharedInstance 
{ 
    if (sharedInstance == nil) { 
     sharedInstance = [[super allocWithZone:NULL] init]; 
    } 

    //Do I Put Code here????? 

    return sharedInstance; 
} 

在此先感謝!

+0

你不需要一個單例來做到這一點。 – Steve 2012-03-03 18:53:18

+5

'我希望能夠在不調用方法的情況下隨時使用這個NSString' - 你在這裏描述一個全局變量,而不是一個單例。另外,你爲什麼要這樣做,爲什麼你想避免調用一個方法?大多數情況下,如果您的設計使用全局變量或單例,則可以進行改進。 – 2012-03-03 19:02:39

+3

[創建一個變量,最終將保存一段數據以供所有方法使用]的可能的重新發布(http://stackoverflow.com/questions/9548556/creating-a-variable-that-will-eventually-hold-一塊數據將被使用的所有) – 2012-03-03 19:40:45

回答

0

如果您確實想要使用單例模式並且可以使用GCD定位OS,那麼dispatch_once可以簡化您的單例代碼,例如,

+ (id)sharedFoo 
{ 
    static dispatch_once_t pred; 
    static Foo *foo = nil; 

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

根據您的要求,您可以覆蓋init方法提供您所需要的任何額外的初始化。

+0

爲什麼不能'+(Foo *)sharedFoo'? – 2012-03-03 20:39:55

+0

@LarsSchneider,如果您使用'Foo *'而不是'id',則必須重新聲明子類的方法。 – 2012-03-03 20:49:58

+1

返回類實例的方法通常會返回匿名類型「id」的對象。這允許初始化方法返回除方法類之外的類的實例。 – FluffulousChimp 2012-03-03 20:50:39