iPhone - яблоко вылетает с выпуском NSMutableArray - PullRequest
0 голосов
/ 04 мая 2011

Это мой код с использованием NSMutableArray.

- (void) put:(NSString *)key value:(NSString *)value
{
    Element *element = [[[Element alloc] initWith:key strValue:value] autorelease];
    if (self.map) {
        [map addObject:element];
    }
    else {
        map = [NSMutableArray arrayWithObject:element];
    }
}

-(void)dealloc
{
    if (map) {
            [map release];
    }

    [super dealloc];
}

Мое яблоко падает в строке: [выпуск карты];

Что не так в моем коде?

Я попытался выпустить «карту» следующим образом.

- (void) put:(NSString *)key value:(NSString *)value
{
    Element *element = [[[Element alloc] initWith:key strValue:value] autorelease];
    if (self.map) {
        [map addObject:element];
    }
    else {
        map = [NSMutableArray arrayWithObject:element];
        [map release]
    }

}

Тогда яблоко не падает. Как решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Метод arrayWithObject: возвращает автоматически освобожденный объект; вам нужно либо сохранить массив:

map = [[NSMutableArray arrayWithObject:element] retain];

или используйте метод initWithObject::

map = [[NSMutableArray alloc] initWithObject:element];
1 голос
/ 04 мая 2011

Если карта является сохраненным / скопированным свойством, сделайте self.map=..., чтобы сохранить его.[NSMutableArray arrayWithObject:element] возвращает автоматически освобожденный объект, который необходимо сохранить.

0 голосов
/ 04 мая 2011

Вы используете удобный инициализатор arrayWithObject, который имеет неявный autorelease. Вы не можете release автоматически освобождать объект.

...