Singleton对象中的NSMutableArray

问题描述:

我想构建一个所有类都可以访问的共享对象。 我希望在这个对象将是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://*.com/questions/145154/what-does-your-objective-c-singleton-look-like –

+0

'array'声明在哪里?他们这样做的方式必须声明为静态,并且不能从属性访问。您可以使属性为'readonly'并编写自己的'getArray'方法,而不是使用'@ synthesize',然而,使它可以从属性访问。 –

您试图从类方法设置实例变量。相反,您应该在单身人士的-init方法中创建array。这样,当您发送消息sharedManager = [[self alloc] init];时,将为该共享实例配置阵列。

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

    if (!self) 
     return nil; 

    array = [[NSMutableArray alloc] init]; 

    return self; 
}