Ответ NilObject - хорошее начало. Вот некоторая дополнительная информация, относящаяся к ручному управлению памятью ( требуется на iPhone ).
Если вы лично alloc/init
объект, он имеет счетчик ссылок 1. Вы несете ответственность за очистку после него, когда он больше не нужен, либо позвонив [foo release]
или [foo autorelease]
. release очищает его сразу же, тогда как autorelease добавляет объект в пул autorelease, который автоматически освобождает его позднее.
autorelease в первую очередь предназначен для случаев, когда у вас есть метод, который должен вернуть рассматриваемый объект (, поэтому вы не можете вручную разблокировать его, иначе вы будете возвращать нулевой объект ), но вы не ' Я тоже не хочу за это держаться.
Если вы приобрели объект, для которого вы не вызывали alloc / init, например:
foo = [NSString stringWithString:@"hello"];
но вы хотите держаться за этот объект, вам нужно вызвать [foo retain]. В противном случае, возможно, он получит autoreleased
, и вы будете удерживать нулевую ссылку (как это было бы в приведенном выше примере stringWithString
). Когда он вам больше не нужен, звоните [foo release]
.