【问题标题】:Why should I do [object release]; object=nil; when deallocating an object?我为什么要做[对象释放];对象=无;释放对象时?
【发布时间】:2011-11-18 00:43:37
【问题描述】:

我想了解为什么这样做会很有用(假设之前已分配“对象”):

[object release]; 
object=nil;

感谢您的帮助,

斯蒂芬

【问题讨论】:

    标签: iphone ios ios4 dealloc memory-management


    【解决方案1】:

    这主要与多线程有关,如果其他线程尝试访问您释放并设置为nil 的对象,它不会崩溃。您可以向nil 对象发送消息,它什么也不做。

    但如果它只是被解除分配,您将向解除分配的对象发送消息,您的应用将崩溃。

    这里是不错的阅读材料:

    如果您投了反对票,请告诉我们原因。

    【讨论】:

      【解决方案2】:

      即使你释放了一个对象,你的变量仍然会指向某个东西。它指向的是未定义的。它仍然可以指向旧对象,或者内存中的某个点。将它设置为 nil 可以避免向它指向的任何地方发送消息,并防止错误(消息 nil 什么都不做)。

      这是一个更好的答案:Setting pointers to nil, objective-c

      【讨论】:

        【解决方案3】:

        如果你刚刚释放它,object 仍然会指向它之前的内存地址。如果您检查它是否为零 (object == nil),它将返回 NO。最好在发布后确保它指向nil

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多