我从苹果文档中读过这篇文章..
在垃圾收集环境中,release是一个no-op(无操作指令)。因此,NSAutoreleasePool提供了一种排放方法,它在引用计数环境中的行为与调用release相同,但在垃圾收集环境中触发垃圾收集(如果自上次收集以来分配的内存大于当前阈值)。因此,通常情况下,您应该使用drain而不是release来处置自动释放池。
但没有得到
的含义1)“如果自上次收集以来分配的内存大于当前阈值。”
和
2) ios不支持垃圾收集器那么垃圾收集器的排水用途是什么?
答案 0 :(得分:1)
1)这可能意味着GC记住分配的内存量,并且在下次调用drain
时,将分配的内存量与最后一个量进行比较。只有在变化足够大的情况下才会进行垃圾收集。
让我以不同的方式解释它:垃圾收集可能很昂贵,所以你需要决定何时收集。为了避免不必要的工作,GC可能会记住收集运行后的内存量(例如,使用25MB)。现在GC下次考虑收集时,它首先决定是否值得做所有的工作。例如,如果使用的内存量现在为25.5MB,则可能不值得做任何事情。但如果现在使用50MB,那么收集很有用。
2)这些东西起源于Mac,GC可用。为了在iOS和Mac OS X之间共享代码,这些看似不必要的方法仍然坚持在iOS上,以尽可能与Mac OS X保持兼容。我甚至怀疑这是因为iOS实际上是Mac OS X的“分支”,因此继承了这些东西。