NSMutable одиночный вопрос - PullRequest
1 голос
/ 06 апреля 2011

Я хотел бы получить некоторую помощь, чтобы разобраться с кодом, который я придумал для реализации синглтона 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 ]

1 голос
/ 06 апреля 2011

Проблема в том, что ваш addArray метод помещает tmpArray внутрь globalArray, что явно не то, что вам нужно.

Я не думаю, что на самом деле есть какая-то причина иметь addArray ввсе - просто вызовите getArray, чтобы получить глобальный массив, и работайте с этим.Например:

// add all objects in tmpArray to prodInstance global array
[[prodInstance getArray] addObjectsFromArray:tmpArray];
0 голосов
/ 06 апреля 2011

В -addArray: вы добавляете аргумент массива arrayToAdd как отдельный элемент в глобальный массив.Похоже, вы хотите добавить все элементы аргумента массива, поэтому замените

[globalArray addObject:arrayToAdd];

на

[globalArray addObjectsFromArray:arrayToAdd];

Кроме того, так как аргумент не должен быть изменяемыммассив, рассмотрите возможность изменения типа параметра на NSArray *.

...