Нужно ли выпускать идентификаторы в Obj-C? - PullRequest
4 голосов
/ 23 мая 2011

Пример:

MyClass *funkStation = [[MyClass alloc] init];
[funkStation dance];
id tmp = funkStation;
...
[funckStation release];

Я знаю, что после того, как я закончу с объектом funkStation, мне нужно его освободить, но как насчет id tmp?Я думаю, что это не копия оригинального объекта, а просто указатель на пространство памяти.

Ответы [ 3 ]

4 голосов
/ 23 мая 2011

Это правильно. Вы отпускаете только funkStation, но не tmp.

tmp должен быть освобожден, только если вы дали ему сохраненный указатель или копию исходного объекта:

id tmp = [funkStation retain];
0 голосов
/ 23 мая 2011

tmp и funkstation относятся к одному и тому же объекту.Вам нужно только отпустить этот объект один раз.Отправка релиза на funkstation и tmp делают то же самое.

0 голосов
/ 23 мая 2011

Если вы выделяете объект явно, с помощью alloc вам нужно освободить его. То же самое с копией.

ID - это указатель, поэтому при его назначении он назначает только значение указателя, поэтому вам не нужно освобождать обе переменные, так как они будут ссылаться на один и тот же объект. Если вы это сделаете, вы наверняка получите segfault.

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