Установка на nil
и освобождение - это две разные операции.
Вы release
объект, чтобы отказаться от владения им.Это описано в стандартных Руководствах по управлению памятью .Если вы не знакомы с ними, вам следует прочитать их, прежде чем приступать к дальнейшему программированию на iOS.
После освобождения объекта вам следует установить его на nil
, если вы знаете, что какой-то другой код может попытаться получить к нему доступ.переменная позже.Это чаще всего встречается с переменными экземпляра.
Например, вы можете использовать переменную экземпляра для хранения какого-либо кеша:
- (NSArray *)items
{
if (!cachedItems) {
cachedItems = [[self calculateItems] retain];
}
return cachedItems;
}
Позже вам может потребоваться очистить этот кеш:
- (void)invalidateCache
{
[cachedItems release];
cachedItems = nil;
}
Нам нужно установить cachedItems равным nil, потому что наш метод items
может попытаться использовать его позже.Если мы сделаем , а не и установим nil
, сообщения, отправленные в (теперь освобожденный) кэш, могут привести к сбою.
Поэтому установите переменную равной nil после ее освобождения, когда это возможно.потенциально будет доступ к другим методам в вашем классе в более поздний момент времени.