iphone EXC_BAD_ACCESS с NSMutableArray

Используйте TCPView, если Вы хотите GUI для этого. Это - старое приложение Sysinternals, которое выкупила Microsoft.

5
задан Quinn Taylor 7 July 2009 в 15:06
поделиться

1 ответ

Это ваша проблема:

if (self.listData !=nil)
{
    [self.listData release];
}

Вам не нужно выполнять эту проверку - в силу того факта, что вы объявили свойство listData с помощью сохраняет свойство , синтезированный установщик автоматически позаботится о освобождении старого значения. Синтезированный установщик будет выглядеть примерно так:

- (void) setListData:(NSMutableArray *)listData
{
    [listData retain];
    [self->listData release];
    self->listData = listData;
}

Обратите внимание на несколько моментов: старое значение освобождается, а новое значение сохраняется. Кроме того, сохранение происходит перед выпуском, в случае самостоятельного назначения: если вы назначаете то же значение, вы не хотите, чтобы оно было преждевременно освобождено. Также обратите внимание, что если новое или старое значение равно nil , ничего плохого не произойдет, поскольку Objective-C явно разрешает вам отправлять сообщения на nil , что не имеет никакого эффекта.

, это означает, что всякий раз, когда вы устанавливаете свойство, вам не нужно беспокоиться об освобождении старого значения - установщик сделает это за вас. Поскольку вы делаете дополнительный выпуск, объект освобождается до того, как вы фактически закончите его использовать, поэтому, как только вы используете его после того, как он был освобожден, вы получите EXC_BAD_ACCESS .

7
ответ дан 14 December 2019 в 08:58
поделиться