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
.