Objective c 如何正确释放对象?

Objective c 如何正确释放对象?,objective-c,memory-management,Objective C,Memory Management,我知道在iOS 5中有自动引用计数功能,它消除了所有这一切的需要,但它非常简单 在释放对象之前将其设置为nil是一种良好的做法,还是在释放对象之后将其设置为nil时,将其设置为nil是一种良好的做法 无论如何,我只想消除我的应用程序中任何可能发生崩溃的可能性,我只想用这种方法来防止它 谢谢 在nil上调用release将一事无成。在nil上调用release将一事无成。使用自动引用计数时,不能调用release。这样做是编译器错误 在手动引用计数中,您应该释放,然后设置为零。将变量设置为nil,

我知道在iOS 5中有自动引用计数功能,它消除了所有这一切的需要,但它非常简单

在释放对象之前将其设置为nil是一种良好的做法,还是在释放对象之后将其设置为nil时,将其设置为nil是一种良好的做法

无论如何,我只想消除我的应用程序中任何可能发生崩溃的可能性,我只想用这种方法来防止它


谢谢

在nil上调用
release
将一事无成。

在nil上调用
release
将一事无成。

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

在手动引用计数中,您应该
释放
,然后设置为
。将变量设置为
nil
,然后调用
release
会泄漏对象(不会释放它)。它不会崩溃,但会消耗内存(最终可能会消耗太多内存,导致操作系统关闭)

ARC是帮助减少碰撞的最佳工具。没有一种机制可以消除所有可能的碰撞。但有两条非常简单的规则会有所帮助:

  • 尽可能使用ARC
  • 启用“将警告视为错误”。禁止在Objective-C中使用警告

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

当您使用自动引用计数时,您不能调用
release
。这样做是编译器错误

在手动引用计数中,您应该
释放
,然后设置为
。将变量设置为
nil
,然后调用
release
会泄漏对象(不会释放它)。它不会崩溃,但会消耗内存(最终可能会消耗太多内存,导致操作系统关闭)

ARC是帮助减少碰撞的最佳工具。没有一种机制可以消除所有可能的碰撞。但有两条非常简单的规则会有所帮助:

  • 尽可能使用ARC
  • 启用“将警告视为错误”。禁止在Objective-C中使用警告

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

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

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

但是它可以防止崩溃,并且对象仍然会被释放,不是吗?标准方法是(预弧):
[someObject release];someObject=nil这并不排除崩溃,但它确实使您更容易看到何时可能没有发布某些内容。如果这就是您所说的防止崩溃的意思,那么指针将不再指向取消引用。但它将防止崩溃,并且对象仍将被释放,不是吗?标准方法是(预弧):
[someObject release];someObject=nil;
这并不排除崩溃,但它确实使您更容易看到何时可能没有发布某些内容。如果您所说的防止崩溃就是指取消引用,那么指针将不再存在。