【发布时间】:2011-06-12 00:21:27
【问题描述】:
关于这个帖子: iPhone - dealloc - Release vs. nil
1) [foo release];
2) self.bar = nil;
解释如下:
正在释放对象,通过实例变量bar访问它。实例变量将成为一个悬空指针。这是dealloc中的首选方法。
将 nil 分配给 self 上的属性栏,这实际上将释放该属性当前保留的任何内容。如果您有属性的自定义设置器,请执行此操作,它应该清理的不仅仅是支持属性的实例变量。
有人可以澄清#1 的解释吗?通过实例变量bar访问?
例如,我在我的对象头中设置了一个私有变量:
SomeObject *oPointer;
我没有在头文件中使用带有此指针的属性设置器,它在实例化对象时确实不会合成。
在我的代码中,在某些条件下,我稍后必须分配这个指针并将其分配给它的对象。
obj = [[SomeObject alloc] initWith....];
所以现在可以通过实例变量 obj 访问它。我有一个 UIButton,它被配置为 RESET 这个对象,它附加的方法将它释放。我通过以下方式做到这一点:
[obj release];
obj = nil;
在所有解释问题之后,为什么我还必须声明 obj = nil? [obj release] 调用似乎也杀死了指针。我在想 [obj release] 会释放它指向的内存,并将 obj 设置为 nil 一次,但它似乎也杀死了指针,因为我的应用程序在 [obj release] 之后尝试引用 obj 时崩溃;
这个问题有意义吗?简单的解释是 [obj release] 做了 ALL 清理,包括杀死指针,我需要注意这一点?
如果我为 SomeObject 指针设置了一个保留属性,释放后指针是否仍会保留?
提前致谢!
【问题讨论】:
标签: iphone objective-c ios memory-management