如何正确释放物体?

时间:2012-02-14 00:26:10

标签: objective-c memory-management

我知道在iOS 5中有自动引用计数,它不需要所有这些,但无论如何它都非常简单。

在释放对象之前将对象设置为nil是一个好习惯,还是在释放它然后将其设置为nil时反之亦然?

无论如何,我只是想在我的应用中摆脱任何崩溃的可能性,我只是想用这种方式来阻止它。

谢谢!

3 个答案:

答案 0 :(得分:3)

在nil上调用release无法完成任何事情。

答案 1 :(得分:1)

使用自动引用计数时,无法调用release。这样做是编译错误。

在手动引用计数中,您应该release然后设置为nil。将变量设置为nil然后调用release会泄漏对象(它不会释放它)。它不会崩溃,但它会占用内存(最终可能会有太多的内存,操作系统会让你失望)。

ARC是帮助减少崩溃的最佳工具。没有任何机制可以消除崩溃的所有可能性。但是两个非常简单的规则会有所帮助:

  • 尽可能使用ARC。
  • 启用“将警告视为错误”。不要在Objective-C中允许警告。

还有许多其他较小的规则,但这些规则是每个iOS开发人员应该开始的规则。

答案 2 :(得分:1)

不,在释放对象之前不要将其设置为nil,如果将其设置为nil,基本上你会丢失指向对象的指针,现在你的变量指向nil。发送到nil没有任何作用。如果要保护自己免受垃圾值/指针的影响,可以在释放对象后将其设置为nil。但是,我不明白为什么你需要将它设置为nil,而不是它是一个实例变量。