Автоматический подсчет ссылок освобождает Objective-C объекты, которые были выделены. Как насчет примитивных переменных типа char *
?
Разве ARC освобождает память malloc'ed для вас?
Ответ 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
.