C指针和Objective C指针有什么区别?

时间:2013-02-05 06:35:56

标签: objective-c c pointers

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

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

2 个答案:

答案 0 :(得分:9)

标题并不反映您的要求。 C指针与“Objective-C指针”之间没有区别。实际上它们只是普通的C指针。

您要求的是它们的正确用法之间的区别。如果指针指向Objective-C对象,则在MRC下,您必须执行

[obj release];

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

答案 1 :(得分: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中做你需要做的任何事情。