2009-04-28 113 views
2

的医生说:我应该在iPhone OS中排放还是释放一个自动释放池?

在一个垃圾收集的环境中, 发送漏消息一池 触发垃圾收集,如果 必要的;然而,发布是 无操作。在参考计数的 环境中,排放与发布具有相同的效果 。因此,通常情况下,您应该使用排水管而不是释放管道。

如果我明白了,他们会说我应该总是使用-drain,如果周围有垃圾收集或引用计数,则无关紧要。在iPhone上没有GC,所以无论如何我发送-Drain?

不幸的是,该文档只谈论可可,而不是可可触摸或iPhone。所以我不确定这里是否也适用。

+0

该文档应该看医生^ _^ – 2013-05-31 12:21:42

回答

7

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

3

只要发送-drain;如果在某个日期后iPhone有GC,那么您可以在没有修改的情况下编译它。这是一个很好的习惯。

+0

谢谢。我想知道一点,因为Apple在main()函数(main.m)中发送了一个-release给ARP。 – Thanks 2009-04-29 08:08:38

-3

在正常的开发过程中,不需要调用autorelease池 - 当你的方法返回时,无论如何它都会这样做。

如果您在循环中创建许多自动发布的对象,并且您有机会在早期释放其中一些对象,那么该例外情况就是如此。

如果您调用drain作为发布的替代品,它将不会释放未被自动发布的对象。