Singleton对象中的NSMutableArray
问题描述:
我想构建一个所有类都可以访问的共享对象。 我希望在这个对象将是NSMutableArray
。Singleton对象中的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。
答
您试图从类方法设置实例变量。相反,您应该在单身人士的-init
方法中创建array
。这样,当您发送消息sharedManager = [[self alloc] init];
时,将为该共享实例配置阵列。
- (id)init
{
self = [super init];
if (!self)
return nil;
array = [[NSMutableArray alloc] init];
return self;
}
使用GCD,不需要'@ synchronized'块来保护只应该出现一次的动作。取而代之的是调用['dispatch_once()'](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_once.3.html)。它更干净,更快。 –
请参阅'你的Objective-C单例是什么样的?' http://stackoverflow.com/questions/145154/what-does-your-objective-c-singleton-look-like –
'array'声明在哪里?他们这样做的方式必须声明为静态,并且不能从属性访问。您可以使属性为'readonly'并编写自己的'getArray'方法,而不是使用'@ synthesize',然而,使它可以从属性访问。 –