【发布时间】:2013-02-05 06:35:56
【问题描述】:
我知道这是一个非常基本的问题。有一些我需要澄清的内存问题。这是我的疑问:
int *p = malloc (50); // will allocate 50 bytes and it is pointed by p.
// Freeing C pointer-->
free(p);
Objective-C 指针:
ClassAobject *objA = .... // allocated ClassAobject..
// Freeing obj-C pointer--->
objA = nil // Is it enough??? will it release all ivars memory properly..
如果是这样,如果我在目标 C 类中有一些 C 指针怎么办?如何在 ARC 中处理此问题
【问题讨论】:
-
如果你使用 ARC,你不需要释放任何对象
-
也不需要指定 nil...?
-
如果不这样做,您需要保留/释放对象,就像您在 C 中所做的那样。您使用哪个?
-
ARC = AutoRetainCount -> 它计算对对象的引用并收集那些不再被指向的对象。含义 -> 您必须分配 nil 或任何其他引用,因此 GC 将取出您不再需要的对象。与 Java 相比。
-
ARC(自动引用计数)不收集引用。它是一个编译器功能,可以为您插入所有需要的保留/释放/自动释放调用。 iOS 上也没有 GarabageCollector,OS X 中的 GC 也将死去。 @Newbee 将 nil 分配给您的指针是个好主意,但即使您不分配 nil,ARC 也会执行所有内存管理。当其作用域完成时,您的对象将收到释放或自动释放消息。
标签: objective-c c pointers