2011-12-01 69 views
0

我想構建一個所有類都可以訪問的共享對象。 我希望在這個對象將是NSMutableArraySingleton對象中的NSMutableArray

這是我如何調用這個對象

+(id)sharedManager{ 
@synchronized(self) { 
    if (sharedManager == nil){ 
     sharedManager = [[self alloc] init]; 
     array = [[NSMutableArray alloc] init]; 
    } 
} 
return sharedManager; 

}

,這是我如何定義的NSMutableArray:

@property (nonatomic,retain) NSMutableArray *array; 

問題是,之後我在創建這個NSMutableArray中sharedManager方法,每次我嘗試訪問數組都等於Nil。

+0

使用GCD,不需要'@ synchronized'塊來保護只應該出現一次的動作。取而代之的是調用['dispatch_once()'](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_once.3.html)。它更乾淨,更快。 –

+0

請參閱'你的Objective-C單例是什麼樣的?' http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like –

+0

'array'聲明在哪裏?他們這樣做的方式必須聲明爲靜態,並且不能從屬性訪問。您可以使屬性爲'readonly'並編寫自己的'getArray'方法,而不是使用'@ synthesize',然而,使它可以從屬性訪問。 –

回答

3

您試圖從類方法設置實例變量。相反,您應該在單身人士的-init方法中創建array。這樣,當您發送消息sharedManager = [[self alloc] init];時,將爲該共享實例配置陣列。

- (id)init 
{ 
    self = [super init]; 

    if (!self) 
     return nil; 

    array = [[NSMutableArray alloc] init]; 

    return self; 
}