Можно ли снова распределить освобожденный объект? - PullRequest
1 голос
/ 07 ноября 2011

если бы я сделал это

Object * myObject = [[Object alloc]init];
[myObject release];

что-то не так с размещением моего объекта в следующей строке

myObject = [[Object alloc]init];

снова

Ответы [ 4 ]

5 голосов
/ 07 ноября 2011

Это безопасно.

Причина в том, что myObject - это , а не объект, это ссылка (или указатель, если хотите быть точным) на объект.Это означает, что у вас есть 2 совершенно независимых объекта, но вы забыли ссылку на первый.

4 голосов
/ 07 ноября 2011

Нет проблем вообще.[myobject release]; освобождает объект, на который указывает myObject.

Позже, myobject = [[Object alloc] init] сделает myobject указателем на другой объект.

2 голосов
/ 07 ноября 2011

В этом нет ничего плохого. Таким образом вы убедитесь, что не пропустили свой первый объект.

Однако, вы технически не выделяете освобожденный объект снова. Вы просто снова используете старый указатель.

Object * myObject = [[Object alloc]init];
myObject = [[Object alloc]init];

приведет к утечке первого созданного вами объекта.

1 голос
/ 07 ноября 2011

да, конечно.эта техника особенно полезна в локальных переменных метода, где вы можете повторно использовать объявленный объект, перераспределив его снова как новый объект .. !!

...