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

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

Ответ 1

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

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

и

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

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

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

Ответ 2

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

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