2009-11-05 3 views
6

Мне интересно, какая разница между релизом и dealloc? После прочтения правил управления памятью (см. Ниже). Я думаю, что большую часть времени я буду использовать выпуск. Однако я хотел знать, что делать для свойств.iPhone SDK: Dealloc против выпуска?

@property (сохранить) ....

Я использую dealloc, но после прочтения этой статьи я не уверен, что это правильно.

Вы берете на себя ответственность за объект, если его создать, используя метод, имя которого начинается с «alloc» или «new» или содержит «copy» (например, alloc, newObject или mutableCopy), или если вы отправляете его сообщение сохранения. Вы несете ответственность за отказ от владения собственными вами объектами с помощью выпуска или авторекламы. В любое другое время, когда вы получаете объект, вы не должны его отпускать.

ответ

21

Вы никогда не должны звонить dealloc на все, кроме super.

Единственный раз, когда вы будете звонить dealloc, находится в методе унаследованного объекта dealloc, и он будет [super dealloc].

Когда сохранить отсчет объекта опускается до нуля, dealloc автоматически будет вызываться для вас, поэтому для того, чтобы управлять памятью должным образом, вам нужно позвонить retain и release при необходимости.

Если вам это не ясно или вы хотите получить информацию о том, как управляется память в Cocoa, вы должны прочитать Memory Management Programing Guide.

+0

Благодарим вас за разъяснение. –

+1

спасибо доброте ARC вышел! –

5

Вы никогда не звоните dealloc напрямую. Он вызывается системой, когда retainCount объекта переходит в 0. Каждый раз, когда вы делаете сохранить, то retainCount увеличивается на 1. Каждый раз, когда вы делаете релиз, он получает убавления. Таким образом, уравновешивая ваши сохраняет и релизы, вы убедитесь, чем когда retainCount получает 0, dealloc будет автоматически вызывается, и ваш объект освобождается.

Как отметил Бен S, только время и место, где вы могли бы назвать dealloc в в dealloc метод наследуемого объекта.

0

Когда вы используете @property(retain), а затем @synthesize, чтобы сгенерировать код недвижимости, вам не нужно управлять ручным управлением памятью. Другие ответы верны в том, что вы не должны использовать dealloc, за исключением собственного переопределения родительского класса dealloc.

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