Использовать объект после того, как он был выпущен? - PullRequest
0 голосов
/ 12 мая 2009

Я изучаю Программирование Какао для Mac OS X Аарона Хиллеграсса и пришел к тому, чего я не понимаю. На странице 150-151 он создает объект, освобождает его и затем использует его снова. Например:

- (void) someMethod
{
    NSMutableArray *array = [[NSMutableArray alloc] init];
    NSString *str = [[NSString alloc] initWithString:"This is a string."];
    [array addObject:str];
    [str release];
    int x = [array indexOfObjectIdenticalTo:str];
    NSLog(@"the index of %@ in the array is %d", str, x);
}

Как это работает, если объект был освобожден? Является ли объект действительным до тех пор, пока метод не будет завершен или не установлен на nil?

1 Ответ

2 голосов
/ 12 мая 2009

Добавление его в массив увеличит счетчик ссылок, поэтому явное освобождение оставит счетчик ссылок равным 1. Это плохая практика (вы не должны выпускать что-то, пока не закончите ссылаться на него), но в этом случае это безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...