Почему Convencience Constructor или Object Factory должны заботиться о выпуске Объекта? - PullRequest
0 голосов
/ 01 мая 2009

На самом деле, если вы используете метод с «new», «create», «alloc» или «copy» в его имени, то вы несете ответственность за освобождение возвращаемого вам объекта. НО: Почему эти методы вызывают -autorelease? Не приведет ли это к "чрезмерному освобождению" объекта?

Допустим, я получаю этот объект из такого метода, а затем вызываю -release для этого. Объект находится в пуле автоматического выпуска и имеет счетчик ссылок 0. Что будет дальше, когда будет выпущен пул автоматического выпуска?

Ответы [ 2 ]

5 голосов
/ 01 мая 2009

Удобные конструкторы не имеют ни одного из этих слов в своих именах (например, [массив NSMutableArray]), поэтому по соглашению они возвращают автоматически выпущенные объекты. Методы, в которых есть одно из слов, указывающих, что они возвращают сохраненный объект, не вызывают autorelease, поэтому часть вашего вопроса неверна.

Если вы освобождаете объекты, возвращенные из удобного конструктора самостоятельно (без явного сохранения их), то они будут переизданы, и ваше приложение, вероятно, будет аварийно завершено.

0 голосов
/ 01 мая 2009

Извините, все! Думаю, я слишком долго сидел на ярком солнце. Конечно, эти вспомогательные методы имеют право собственности на объекты, которые они создают, потому что они вызывают -alloc в некоторый момент в начале. И сам метод -alloc не вызывает -alloc, так как это уже -alloc. Вот и все.

Мысль об удалении вопроса, но, может быть, кто-то еще слишком долго сидел на солнце, как и я. Так что это может помочь.

...