освободить память и сам указатель?в объективе-с - PullRequest
0 голосов
/ 30 марта 2012

Я немного запутался, когда мы отпускаем pointer или используем nil для указателя, он освобождает память.Но как насчет самого указателя?он указывает на объект, который больше не существует, поэтому указатель автоматически удаляется?подразумевается ли, что dealloc освобождает и память, и сам указатель?

Спасибо

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

Указатель - это локальная переменная, представляющая адрес в памяти, а не объект. Там нет ничего, чтобы выпустить.

Например:

int i = 1;
NSSomething *object = [[NSSomething alloc] init];

Теперь у вас есть 2 локальные переменные в стеке, одна типа int, а другая типа pointer to NSSomething. У вас также есть новый экземпляр NSSomething в куче. Если вы просто return сейчас, ваши переменные i и object выйдут из области видимости и исчезнут, но экземпляр NSSomething в куче будет жить вечно. Чтобы избежать этого, вы должны release (или autorelease) сделать это перед вами return из функции.

1 голос
/ 30 марта 2012

Указатель по-прежнему указывает на адрес объекта, даже если объект был освобожден.Обычно вы хотите установить указатель на ноль или другой объект после освобождения предыдущего объекта, на который он указывал.Если вы используете свойства target-c, указатель, связанный со свойством, автоматически устанавливается равным nil.

0 голосов
/ 30 марта 2012

Сам указатель при возврате стирается кадром стека (что-то вроде вызова сборки RET, больше похоже на скобки стека {}, которые фактически открывают {и закрывают} кадр стека).

Вам не о чем беспокоиться, когда речь идет о самих указателях.Если вы действительно хотите, вы можете назначить указатель (приведенный как void *) и установить его в NULL после установки id * как nil.(Установка NULL сразу же вызывает ошибку неправильного доступа при передаче сообщения target-c).

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