2009-05-01 8 views
0

Фактически, если вы используете метод с «новым», «создать», «назначить» или «скопировать» на свое имя, тогда вы несете ответственность за освобождение объекта, который вам возвращается. НО: Почему эти методы делают вызов -autorelease? Разве это не привело бы к «чрезмерному выпуску» объекта?Почему конструктор Convencience или Object Factory должен заботиться об освобождении объекта?

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

+0

Удаление iPhone-специфических тегов, так как это на самом деле не связано. Не уверен, почему люди будут голосовать за это, это хороший вопрос, хотя и тот, который часто задают вопросы, поскольку он является точкой отсчета для новичков Objective-C. –

ответ

5

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

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

+0

Спасибо! Мне нужен холодный душ;) – Thanks

0

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

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