-
自动释放池(Autorelease Pools)
每个线程都维护它自己的 NSAutoreleasePool 的栈对象。Cocoa 希望在每个当前线程的栈里面有一个可用的自动释放池。如果一个自动释放池不可用,对象将不会给释放,从而造成内存泄露。对于 Application Kit 的主线程通常它会自动创建并消耗一个自动释放池,但是辅助线程(和其他只有 Foundationd 的程序)在使用 Cocoa前必须自己手工创建。如果你的线程是长时间运行的,那么有可能潜在产生很多自动释放的对象,你应该周期性的销毁它们并创建自动释放池(就像 Application Kit 对主线程那样)。否则,自动释放对象将会积累并造成内存大量占用。如果你的脱离线程没有使用 Cocoa,你不需要创建一个自动释放池。