ARC освобождает память malloc'ed для вас?

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

2 ответов


нет в документ llvm на ARC

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

и

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

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

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


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

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