2

我知道这是一个非常基本的问题。有一些我需要澄清的内存问题。这是我的疑问:

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 中处理这个问题

4

2 回答 2

9

标题不能反映您的要求。C 指针和“Objective-C 指针”之间没有区别。真的,它们只是普通的 C 指针。

您要问的是它们正确用法之间的区别。如果一个指针指向一个Objective-C对象,那么在MRC下,你必须做

[obj release];

减少它的引用计数(这可能会释放它)。在 ARC 下,将指针设置为nil就足够了(如您的示例中所示)。

于 2013-02-05T06:42:10.510 回答
0

“C 指针”和“Objective-C 指针”之间没有区别。void* 和 int* 在 C 和 Objective-C 中是完全一样的。

但是,当您使用 ARC 时,某些指针类型由 ARC 专门处理。这些指针类型是:

id
Pointers to Objective-C objects like NSString*
Class
Blocks

这些都是指向各种被引用计数的 Objective-C 对象的指针。ARC 自动跟踪存在对这些对象中的任何一个的引用的数量,如果最后一个引用被删除,则对象本身将被释放。

如果一个对象被释放,ARC 会自动删除它所引用的对象的所有引用。但是,如果一个对象的指针不受 ARC 控制,则您必须在 dealloc 中执行您需要执行的任何操作。

于 2014-03-22T13:54:43.887 回答