我有点困惑,当我们释放pointer
或使用nil
指针时,它会释放内存。但指针本身呢?它指向一个不再存在的对象,指针是否自动删除?是否暗示dealloc
释放内存和指针本身?
谢谢
答案 0 :(得分:3)
指针是一个局部变量,表示内存中的地址,而不是对象。没有什么可以释放的。
例如:
int i = 1;
NSSomething *object = [[NSSomething alloc] init];
现在堆栈中有2个局部变量,一个是int
类型,另一个是pointer to NSSomething
类型。您还在堆中有一个新的NSSomething
实例。如果您现在只是return
,那么您的i
和object
变量将超出范围并消失,但堆中的NSSomething
实例将永久存在。为避免这种情况,您必须release
(或autorelease
)之前return
来自该函数。
答案 1 :(得分:1)
即使对象已被释放,指针仍指向对象的地址。通常,您希望在释放它指向的前一个对象后将指针设置为nil或另一个对象。如果使用objective-c属性,则连接到该属性的指针将自动设置为nil。
答案 2 :(得分:0)
指针本身在返回时被堆栈帧擦除(有点像汇编调用RET,更像是实际打开{和关闭}堆栈帧的堆栈括号{}。
当涉及指针本身时,你什么都不用担心。如果你真的想要,你可以指定指针(强制转换为void *)并在将id *设置为nil后将其设置为NULL。 (当传递objective-c消息时,立即设置NULL会导致错误的访问错误。)