Все элементы в NSMutableArray исчезают после копирования - PullRequest
1 голос
/ 19 декабря 2011

Я инициализирую контроллер представления с NSMutableArray. Но в init я должен начать с NSMutableArray, но после этого все элементы исчезли.

UIViewController* vc = [[[PhotoAlbumViewController alloc] initWithImages:imageArrayBig] autorelease];

Ниже приведено определение функции выше.

// This is the definition of the init function
- (id)initWithImages:(NSMutableArray *)bigImages {

    if ((self = [self initWithNibName:nil bundle:nil])) {
        _imageArrayBig = [[NSMutableArray alloc] init];
        for (ArrayObject* tmp in bigImages) {
            [_imageArrayBig addObject: tmp];
        }
    }
    // After the copying, all the elements in bigImages and _imageArrayBig disappear :(
    return self;
}

Есть идеи? Есть ли утечка памяти?

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Похоже, вы смешиваете имя свойства с именем экземпляра, так как вы используете imageArrayBig и _imageArrayBig.

Лучше придерживаться одного, предпочтительно self.imageArrayBig, который является свойством

Вы также можете более эффективно скопировать массив, используя addObjectsFromArray

что-то вроде

NSMutableArray* tmp = [[NSMutableArray alloc] init];
[tmp addObjectsFromArray:bigImages];
self.imageArrayBig = tmp;
[tmp release];
0 голосов
/ 19 декабря 2011

Код, который вы разместили, хорош, но может быть оптимизирован, как подсказывает @andersВам не нужна собственность.Вы уверены, что в bigImages есть объекты, когда вы переходите к init?Добавьте NSLog для проверки:

- (id)initWithImages:(NSMutableArray *)bigImages {
    self = [self initWithNibName:nil bundle:nil];
    if (self) {
        NSLog(@"MyController:initWithImages: bigImages count = %d", [bigImages count]);
        _imageArrayBig = [[NSMutableArray alloc] initWithArray:bigImages];
    }
    return self;
}

Также не ясно, почему вам нужно передать изменяемый массив.Если вы создаете новый изменяемый массив, вы можете передать NSArray.

...