释放内存和指针本身?在目标c

时间:2012-03-30 02:54:04

标签: objective-c pointers memory-management

我有点困惑,当我们释放pointer或使用nil指针时,它会释放内存。但指针本身呢?它指向一个不再存在的对象,指针是否自动删除?是否暗示dealloc释放内存和指针本身?

谢谢

3 个答案:

答案 0 :(得分:3)

指针是一个局部变量,表示内存中的地址,而不是对象。没有什么可以释放的。

例如:

int i = 1;
NSSomething *object = [[NSSomething alloc] init];

现在堆栈中有2个局部变量,一个是int类型,另一个是pointer to NSSomething类型。您还在堆中有一个新的NSSomething实例。如果您现在只是return,那么您的iobject变量将超出范围并消失,但堆中的NSSomething实例将永久存在。为避免这种情况,您必须release(或autorelease)之前return来自该函数。

答案 1 :(得分:1)

即使对象已被释放,指针仍指向对象的地址。通常,您希望在释放它指向的前一个对象后将指针设置为nil或另一个对象。如果使用objective-c属性,则连接到该属性的指针将自动设置为nil。

答案 2 :(得分:0)

指针本身在返回时被堆栈帧擦除(有点像汇编调用RET,更像是实际打开{和关闭}堆栈帧的堆栈括号{}。

当涉及指针本身时,你什么都不用担心。如果你真的想要,你可以指定指针(强制转换为void *)并在将id *设置为nil后将其设置为NULL。 (当传递objective-c消息时,立即设置NULL会导致错误的访问错误。)