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
,以便从属性访问它。