我知道这是一个非常基本的问题。我需要澄清一些内存问题。这是我的疑问:
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中处理这个问题
答案 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中做你需要做的任何事情。