【发布时间】:2011-11-18 00:43:37
【问题描述】:
我想了解为什么这样做会很有用(假设之前已分配“对象”):
[object release];
object=nil;
感谢您的帮助,
斯蒂芬
【问题讨论】:
标签: iphone ios ios4 dealloc memory-management
我想了解为什么这样做会很有用(假设之前已分配“对象”):
[object release];
object=nil;
感谢您的帮助,
斯蒂芬
【问题讨论】:
标签: iphone ios ios4 dealloc memory-management
这主要与多线程有关,如果其他线程尝试访问您释放并设置为nil 的对象,它不会崩溃。您可以向nil 对象发送消息,它什么也不做。
但如果它只是被解除分配,您将向解除分配的对象发送消息,您的应用将崩溃。
这里是不错的阅读材料:
如果您投了反对票,请告诉我们原因。
【讨论】:
即使你释放了一个对象,你的变量仍然会指向某个东西。它指向的是未定义的。它仍然可以指向旧对象,或者内存中的某个点。将它设置为 nil 可以避免向它指向的任何地方发送消息,并防止错误(消息 nil 什么都不做)。
这是一个更好的答案:Setting pointers to nil, objective-c
【讨论】:
如果你刚刚释放它,object 仍然会指向它之前的内存地址。如果您检查它是否为零 (object == nil),它将返回 NO。最好在发布后确保它指向nil。
【讨论】: