NSMutable单例问题

时间:2011-04-06 01:29:00

标签: 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

@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相同。

谢谢

2 个答案:

答案 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 *