ARC освобождает память malloc для вас? - PullRequest
10 голосов
/ 27 ноября 2011

Автоматический подсчет ссылок освобождает объекты Objective-C, которые были выделены. А как насчет примитивных переменных, таких как char *?

Ответы [ 2 ]

8 голосов
/ 27 ноября 2011

Нет в соответствии с документом llvm в ARC

Автоматический подсчет ссылок реализует автоматическое управление памятью для объектов и блоков Objective-C, освобождая программиста от необходимости явно вставлять запоминающие устройства.и релизы.Это не обеспечивает сборщик цикла;вместо этого пользователи должны явно управлять временем жизни.

и

Указатель сохраняемого объекта (или указатель сохраняемого объекта) представляет собой значение типа указателя сохраняемого объекта (сохраняемого типа).Существует три вида типов указателей объектов:

  • блочные указатели (сформированные путем применения сигилла объявления caret (^) к типу функции)
  • Указатели объектов Objective-C (id, Class, NSFoo * и т. Д.)
  • typedefs, помеченные __attribute __ ((NSObject))

Другие типы указателей, такие как int * и CFStringRef, не подчиняются семантике ARCи ограничения.

3 голосов
/ 27 ноября 2011

ARC напрямую освобождает только объекты ObjC (не char*, void*, int* ...). Однако ARC все еще вызывает метод dealloc объектов. Так что, если у вас есть объект ObjC, который malloc занимает немного памяти и указывает на него символ *, а метод dealloc освобождает память, память все равно будет должным образом удалена.

То же самое для базовых базовых объектов, вам все равно нужно CFRelease их. Даже бесплатные CF-мосты нуждаются в ручном вызове CFRelease.

...