ARC是否会为您释放malloc分配的内存?

10

自动引用计数(ARC)用于释放已分配的Objective-C对象。那么像char *这样的基本变量呢?

2个回答

8
根据LLVM关于ARC的文档,自动引用计数实现了Objective-C对象和块的自动内存管理,使程序员不需要显式插入保留和释放。它不提供循环收集器;用户必须显式地管理生命周期。
另外,可保留对象指针(或可保留指针)是可保留对象指针类型(可保留类型)的值。有三种可保留对象指针类型:
- 块指针(通过将脱字符 (^)声明符号应用于函数类型形成) - Objective-C对象指针(id,Class,NSFoo*等) - 使用__attribute__((NSObject))标记的typedefs
其他指针类型,如int*和CFStringRef,则不受ARC语义和限制的影响。

3

ARC只能直接释放Objective-C对象(不能释放char*void*int*等)。但是,ARC仍会调用对象的dealloc方法。因此,如果您有一个ObjC对象,它使用malloc分配了一些内存并将char*指向该内存,并且dealloc方法调用free,则该内存仍将被正确处理。

对于Core Foundation对象也是如此,您仍然需要手动调用CFRelease。即使是桥接到Toll-Free的CF类型,也需要手动调用CFRelease


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接