2010-02-03 3 views

ответ

5

Оба являются автореализованными, то есть вам не нужно выпускать их самостоятельно. Правило заключается в том, что у вас есть объект, если вы отправляете + Alloc или -копию или явно сохранить его:

  • [[SomeClass Alloc] инициализации ...]
  • [SomeObject копировать]
  • [ некоторый объект сохраняется]

Если у вас есть объект, вы должны его освободить. + new - это ярлык для + alloc и -init.

+0

Хорошо, но неправильно ли выпустить его? Когда он будет выпущен, если я не сделаю этого явно? – glutz78

+0

Да, неправильно выпускать объект, который у вас нет. Это называется «чрезмерным высвобождением» и приведет к сбою, когда -release (или любое другое сообщение, если на то пошло) отправляется на уже выпущенный объект. Автореализованные объекты фактически освобождаются, когда закрывающий NSAutoreleasePool освобождается/сливается (если вы не используете их явно, это происходит в конце каждого цикла цикла событий). См. «Руководство по программированию управления памятью для какао». – Costique

5

Нет, оба возвращенных дат из этих методов автореализовываются. Вам не нужно беспокоиться об управлении их памятью, хотя, чтобы быть хорошим гражданином, установка указателя на нуль, когда вы закончите с ними, будет хорошей идеей.

Как правило, вы можете следовать тому, что я называю правилом CARN. в какао/какао Прикоснитесь к любому методу, который имеет слова Copy, Alloc, Retain, или Новый в них возвратит объекты, которые должны быть выпущены вами в какой-то момент. Это соглашения об именах, применяемые к методам, возвращающим объекты с сохранением числа +1. Класс, который вызывает эти методы, «владеет» объектом и несет ответственность за его освобождение, когда он закончил с ним.

Надеюсь, это поможет.

Смежные вопросы