Может кто-то объяснять различия между free()
, release
, autorelease
и dealloc
?
free()
- это функция языка Си, которую вы используете для утилизации ненужной памяти, полученной через malloc()
или другую функцию, которая, согласно документации, требует free() для деаллокации памяти, например. например, strdup()
.
-dealloc
- это селектор Objective-C, который посылается средой выполнения Objective-C объекту, когда объект больше не принадлежит какой-либо части приложения.
-release
- это селектор, который вы посылаете объекту, чтобы указать, что вы отказываетесь от владения этим объектом. Когда объект не принадлежит никому, среда выполнения посылает ему сообщение -dealloc
.
-autorelease
- это селектор, который вы посылаете объекту, чтобы указать, что вы отказываетесь от владения объектом. Однако если сейчас никто не владеет объектом, окончательное -dealloc
будет отложено до некоторого неопределенного более позднего момента. Фактически, вы передаете свое право собственности пулу автоматического освобождения, который затем освободит объект, когда сам будет освобожден (или осушен).
Вы никогда не должны посылать -dealloc
объекту, кроме как super
в собственном методе -dealloc
объекта.
free
является противоположностью malloc
и используется в C. Скорее всего, вы не будете часто использовать его при программировании на Objective Cосвобождаете
его, когда закончите с нимautorelease
объект. Это автоматически освобождает его в конце текущей итерации цикла выполненияdealloc
. Вы не должны вызывать этот метод самостоятельноВы "владеете" объектом, если вы alloc
, new
, retain
или copy
его.
Apple предоставляет хорошую документацию по этому вопросу.
Из 4 методов, которые вы упомянули, вы обычно используете только release
и autorelease
в objective-c. free
может быть использован, когда вы использовали c и malloc
, в противном случае вам следует использовать релиз
и autorelease
.
dealloc
не должен вызываться каким-либо кодом, так как он может мешать циклу сохранения / освобождения, который объект-c использует для отслеживания ресурсов. Использование dealloc
почти наверняка приведет к сбоям во время выполнения, если вы когда-нибудь его используете.
Основным источником использования выпуска
и автоматического выпуска
является документация Apple по управлению памятью