Iphone 可变单态问题
我想得到一些帮助来整理我为实现NSMutableArray单例而编写的代码 .h文件Iphone 可变单态问题,iphone,objective-c,cocoa-touch,singleton,nsmutablearray,Iphone,Objective C,Cocoa Touch,Singleton,Nsmutablearray,我想得到一些帮助来整理我为实现NSMutableArray单例而编写的代码 .h文件 @interface MySingleton : NSObject { NSMutableArray *globalArray; } + (MySingleton *)instance; - (NSMutableArray *) getArray; - (void) addArray:(NSObject *)arrayToAdd; - (id) init; .m file @impl
@interface MySingleton : NSObject {
NSMutableArray *globalArray;
}
+ (MySingleton *)instance;
- (NSMutableArray *) getArray;
- (void) addArray:(NSObject *)arrayToAdd;
- (id) init;
.m file
@implementation MySingleton
- (id) init
{
self = [super init];
globalArray = [[NSMutableArray alloc] init];
return self;
}
+ (MySingleton *)instance {
static MySingleton *instance;
@synchronized(self) {
if(!instance) {
instance = [[MySingleton alloc] init];
}
}
return instance;
}
- (NSMutableArray *) getArray{
return globalArray;
}
- (void) addArray:(NSMutableArray *)arrayToAdd
{
[globalArray addObject:arrayToAdd];
}
someviewcontroller.m
MySingleton *prodInstance = [MySingleton instance];
[prodInstance addArray:tmpArray];
NSLog(@"cnt tmpArray %i",[tmpArray count]);
NSLog(@"cnt singleton %i",[[prodInstance getArray] count]);
控制台将显示计数3和1
我认为[prodInstance getArray]将与tmpArray相同
谢谢问题在于您的
addArray
方法将tmpArray
放入globalArray
中,这显然不是您想要的
我认为根本没有理由使用addArray
——只需调用getArray
获取全局数组,然后使用它。例如:
// add all objects in tmpArray to prodInstance global array
[[prodInstance getArray] addObjectsFromArray:tmpArray];
问题是您的
addArray
方法将tmpArray
放入globalArray
中,这显然不是您想要的
我认为根本没有理由使用addArray
——只需调用getArray
获取全局数组,然后使用它。例如:
// add all objects in tmpArray to prodInstance global array
[[prodInstance getArray] addObjectsFromArray:tmpArray];
在
-addArray:
中,将数组参数arrayToAdd
添加为全局数组中的单个元素。看起来您想添加数组参数的所有元素,所以替换
[globalArray addObject:arrayToAdd];
与
此外,由于参数不需要是一个可变数组,请考虑将参数类型更改为<代码> NSARTS* .< /P> < P>在<代码> -AdAdARS:<代码>中,将数组参数<代码> AlraytoAddio/Cuth>作为全局数组中的一个元素添加。看起来您想添加数组参数的所有元素,所以替换
[globalArray addObject:arrayToAdd];
与
此外,由于参数不需要是一个可变数组,请考虑将参数类型更改为<代码> NSARSt* < /P>