我应该在iPhone OS中排除或释放自动释放池吗?

时间:2009-04-28 18:56:31

标签: iphone memory-management uikit autorelease

医生说:

  

在垃圾收集环境中,   向游泳池发送排水消息   触发垃圾收集if   必要;然而,释放是一个   无操作。在参考计数   环境,排水也有同样的效果   作为释放。因此,通常,你   应该使用排水而不是释放。

如果我做对了,他们说我应该总是使用-drain,无论周围有垃圾收集还是引用计数都没关系。在iPhone上没有GC,所以无论如何我发送-drain?

不幸的是,该医生只讨论过Cocoa,而不是Cocoa Touch或iPhone。所以我不确定那里是否适用。

3 个答案:

答案 0 :(得分:7)

这并不重要,它们都具有相同的效果。如果你搬到垃圾收集环境(如果iPhone SDK的未来版本支持它,或者你将它复制到Mac OS X项目中),Apple建议使用drain,这就是我的用途。

答案 1 :(得分:3)

发送-drain;如果在以后某个日期iPhone有GC,你就可以编译它而无需修改。这是一个很好的习惯。

答案 2 :(得分:-3)

在正常开发中,不需要在自动释放池上调用耗尽 - 无论如何,当你的方法返回时,它都会这样做。

例外情况是,如果你在循环中创建了许多自动释放的对象,并且你有机会在之前释放其中的一些。

如果您将drain作为release的替代品,它将不会释放尚未自动释放的对象。