Подтвердить что ты не робот

Каковы различия между бесплатным, dealloc, выпуском и авторекламой?

Может кто-нибудь объяснить различия между free(), release, autorelease и dealloc?

4b9b3361

Ответ 1

free() - это функция C, которую вы используете, чтобы избавиться от ненужной памяти, которую вы получили с помощью malloc() или другой функции, которая документирована, чтобы требовать, чтобы free() освобождал свою память, например. strdup().

-dealloc - селектор Objective-C, который отправляется при выполнении Objective-C среды выполнения объекта, когда объект больше не принадлежит какой-либо части приложения.

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

-autorelease - это селектор, который вы отправляете объекту, чтобы указать, что вы отказываетесь от владения объектом. Однако, если теперь никто не владеет объектом, окончательный -dealloc будет отложен до некоторой неопределенной более поздней точки. Фактически, то, что вы на самом деле делаете, это передача вашего права собственности в пул автозапуска, который затем выйдет из него, когда он сам будет выпущен (или разряжен).

Вы никогда не должны отправлять -dealloc объекту, кроме super в собственный метод -dealloc объекта.

Ответ 2

Из 4 описанных вами методов вы обычно используете только release и autorelease в objective-c. free может использоваться, когда вы использовали c и malloc, иначе вы должны использовать release и autorelease.

dealloc не должен вызываться каким-либо вашим кодом, так как он может помешать циклу сохранения/освобождения, который objective-c использует для отслеживания ресурсов. Использование dealloc почти наверняка приведет к сбоям во время выполнения, если вы когда-либо используете его.

Конечным ресурсом использования release и autorelease является Документация по управлению памятью Apple

Ответ 3

  • free является противоположностью malloc и используется в C. Вероятно, вы не будете использовать его очень много программирования в Objective C
  • Если у вас есть объект, вы release его, когда закончите с ним
  • Вы также можете autorelease объект. Это автоматически освобождает его в конце текущей итерации цикла выполнения.
  • Когда счетчик ссылок на объект падает до нуля, среда выполнения вызывает dealloc. Вы не должны сами называть этот метод.

Вы "владеете" объектом, если вы alloc, new, retain или copy его.

Apple предоставляет хорошую документацию на этом.