Objective c 释放对象

Objective c 释放对象,objective-c,ios,Objective C,Ios,我在dealloc方法中释放由@property指令创建的对象,如下所示 -(void)dealloc { [object release], object = nil; } 我有两个问题 dealloc方法是释放@property生成的对象的正确位置吗 将对象设置为零是一种好做法吗 这是释放对象的正确位置。显然,只有在没有启用ARC的情况下进行编译时,尽管与ARC一样,您甚至不能调用release 将其设置为nil没有实际意义。它就要被完全销毁了-为什么还要麻烦将它设置为nil 是的,在

我在dealloc方法中释放由@property指令创建的对象,如下所示

-(void)dealloc
{
  [object release], object = nil;
}
我有两个问题

  • dealloc方法是释放@property生成的对象的正确位置吗
  • 将对象设置为零是一种好做法吗
  • 这是释放对象的正确位置。显然,只有在没有启用ARC的情况下进行编译时,尽管与ARC一样,您甚至不能调用
    release

  • 将其设置为
    nil
    没有实际意义。它就要被完全销毁了-为什么还要麻烦将它设置为
    nil


  • 是的,在释放对象后将指针设置为指向nil是一种很好的做法。原因是,如果您将来尝试在对象被释放后访问该对象的值,您将尝试访问垃圾值(称为悬挂指针),您的应用程序将崩溃。但是如果指针设置为nil,那么您可以使用它做任何事情,因为您可以向nil对象发送消息

    要将两行代码合并为一行,只需使用访问器方法:

    self.object = nil; //this will both release an object and set its pointer to nil
    

    如果你的setter有任何副作用的话,请注意。在这里,我修复了它:不,这不是一个好的做法,所以在释放对象后将指针设置为nil。原因是,如果您将来尝试在对象被释放后访问该对象的值,您将尝试访问垃圾值(称为悬挂指针),您的应用程序将崩溃。由于崩溃,您将立即知道代码中存在内存管理错误,并且可以修复它。但是如果指针设置为nil,您将覆盖内存管理错误,直到它在其他地方导致崩溃或故障。我必须承认,您在谈论调试时是对的。如果您想成为内存管理大师,请使用self.object=nil。如果您仍在学习,只需使用[object release],而不将其设置为nil,因为它将帮助您进行调试。您可以在此处阅读有关将属性设置为nil的编码实践:有关内存处理的信息,请参阅本文