我想帮助整理出我实现NSMutableArray单例的代码。
.h文件
@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相同。
谢谢
答案 0 :(得分:1)
问题是您的addArray
方法将tmpArray
放在globalArray
内,这显然不是您想要的。
我认为根本没有任何理由可以使用addArray
- 只需调用getArray
来获取全局数组,然后使用它。例如:
// add all objects in tmpArray to prodInstance global array
[[prodInstance getArray] addObjectsFromArray:tmpArray];
答案 1 :(得分:0)
在-addArray:
中,您将数组参数arrayToAdd
添加为全局数组中的单个元素。看起来你想要添加数组参数的所有元素,所以替换
[globalArray addObject:arrayToAdd];
与
[globalArray addObjectsFromArray:arrayToAdd];
此外,由于参数不需要是可变数组,因此请考虑将参数类型更改为NSArray *
。