Iphone Singleton对象中的NSMutableArray

Iphone Singleton对象中的NSMutableArray,iphone,objective-c,Iphone,Objective C,我想构建一个所有类都可以访问的共享对象。 我希望此对象中的值为NSMutableArray 这就是我对这个物体的称呼 +(id)sharedManager{ @synchronized(self) { if (sharedManager == nil){ sharedManager = [[self alloc] init]; array = [[NSMutableArray alloc] init]; } } return sharedManag

我想构建一个所有类都可以访问的共享对象。 我希望此对象中的值为
NSMutableArray

这就是我对这个物体的称呼

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

这就是我如何定义NSMutableArray的:

@property (nonatomic,retain) NSMutableArray *array;

问题是,在sharedManager方法中创建此NSMutableArray后,每次尝试访问该数组时,该数组都等于零

您正在尝试从类方法设置实例变量。相反,您应该在singleton中的
-init
方法中创建
数组。这样,当您发送消息时,
sharedManager=[[self-alloc]init],将为该共享实例配置阵列

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

    if (!self)
        return nil;

    array = [[NSMutableArray alloc] init];

    return self;
}

您正在尝试从类方法设置实例变量。相反,您应该在singleton中的
-init
方法中创建
数组。这样,当您发送消息时,
sharedManager=[[self-alloc]init],将为该共享实例配置阵列

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

    if (!self)
        return nil;

    array = [[NSMutableArray alloc] init];

    return self;
}

使用GCD,无需使用
@synchronized
块来保护只应发生一次的操作。将其替换为调用。它更干净、更快。请参阅“Objective-C单例是什么样子的?”
array
在哪里声明?它们必须声明为静态,并且不能从属性访问。您可以将属性设置为只读,并编写自己的
getArray
方法,而不是使用
@synthesis
,以使其可从属性访问。使用GCD,无需使用
@synchronized
块来保护只应发生一次的操作。将其替换为调用。它更干净、更快。请参阅“Objective-C单例是什么样子的?”
array
在哪里声明?它们必须声明为静态,并且不能从属性访问。您可以将属性设置为只读,并编写自己的
getArray
方法,而不是使用
@synthesis
,以便从属性访问它。