Является ли объект свободным / освобожденным на dealloc и / или выпуске? - PullRequest
3 голосов
/ 12 июля 2010

Я недавно прошел тест с целью-c, чтобы посмотреть, как я буду.

Оказывается, мой результат оказался не таким хорошим, как я надеялся.Это означает больше обучения.

Во время теста мне задали этот вопрос:

Как освободить объект?

A.[obj dealloc];Б. [выпуск выпуска];C. Ничего из вышеперечисленного

Мой выбор был А, и я не знаю, правильно ли это.Вопрос сбивает с толку: не освобождает ли callloc, следовательно, достигает того же результата?

Ответы [ 3 ]

7 голосов
/ 12 июля 2010

Нет. release уменьшает количество ссылок объекта.

Вы не звоните dealloc напрямую. Вызовите release, чтобы уменьшить счетчик ссылок, и позвольте среде выполнения вызвать dealloc, когда счетчик ссылок станет нулевым.

0 голосов
/ 12 июля 2010

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

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

Если вы освобождаете объект в среде с подсчетом ссылок, вы не освобождаете его, а просто указываете, что отказываетесь от любого требования о владении.Когда никто не претендует на право собственности, dealloc вызывается средой выполнения и объект освобождается.Аналогично, в среде сбора мусора, когда вы перезаписываете ссылку, вы даете понять, что она вам больше не интересна.После того, как все ссылки исчезли, через некоторое неопределенное время, финализу отправляется объект, и объект освобождается.

0 голосов
/ 12 июля 2010

Да, release вызывает dealloc, но только после уменьшения счетчика ссылок и только если счетчик ссылок стал нулевым Ссылка класса NSObject говорит о том, что release:

"Decrements the receiver’s reference count."  

"The receiver is sent a dealloc message when its reference count reaches 0."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...