我经常看到当释放ab对象时,我们立即将其设置为nil。我知道release和nil都释放了与对象关联的旧值,但是在释放的情况下,它将对象保留为悬空指针,因此我们必须将其设置为nil。

所以我的问题是,如果nil释放对象的旧值并将对象设置为nil,为什么我们不应该只使用nil,为什么w也应该使用release。

方式1:

MyClass *obj = [[MyClass alloc] init];
[obj release];
obj = nil;

方式二:
MyClass *obj = [[MyClass alloc] init];
obj = nil;

如果使用way1,为什么不只使用way2,则way1和way2的真正区别是什么?

最佳答案

将指针设置为nil不会释放该指针的先前目标所占用的内存。用简单的英语来说,将其分配为nil不会释放它。

如果您的应用程序是垃圾回收,则发布是无操作的,可以忽略。否则,这是非常非常必要的。因此,方法1总是正确的,而方法2仅在垃圾回收下才是正确的。

注意:此答案不适用于使用“自动引用计数”的项目。在ARC下,将指针设置为nil确实会向对象发送释放。

关于iphone - 我们为什么要释放?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1761036/

10-12 00:40
查看更多