Создание класса nil и освобождение ссылки

В моем коде я делаю,

ClassA *reference = [[ClassA alloc] init];
[reference invokeMethod];
reference = nil;
[reference release];

Без ссылки = nil я знаю, что он освобождает память, потому что это обычный способ сделать это. Но в этой ситуации, если мы сделаем ссылку нулевой и освободим память позже, удалит ли она более раннюю память, использованную для создания объекта?

Спасибо


person Dilshan    schedule 13.11.2010    source источник


Ответы (2)


Нет. release = nil просто делает память, на которую изначально указывает, недоступной; он не удалит потребляемую память. (Кроме того, после этого оператор [reference release]; становится неоперативным.)

person kennytm    schedule 13.11.2010

Как сказал Кенни, Release = nil просто заставляет ссылочный объект указывать на nil. теперь вы потеряли контроль над выделенным объектом ClassA и не можете его освободить, поэтому возникает утечка памяти. И [референсный выпуск] пытается освободить память нулевого объекта, что также может привести к сбою.

person Gopalakrishnan Mallappan    schedule 13.11.2010