一般來說在應用的main thread中, 已經存在了一個autorelease pool. 有兩種情況需要開發者自己新建autorelease pool:
在main thread中, 在某個方法中出現大量的autoreleased objects, 為了避免memory footprint的增大, 可以手動創建一些autorelease pool用來drain objects. 創建新的thread, 並在其中訪問了Cocoa, 需要在訪問的前創建autorelease pool, 訪問結束後drain. 最後一點, 在每個thread中都會維持一個stack, 其中放置著所有在這個thread中創建但未銷毀的pool, 每當一個新的pool創建後, 它就位於stack的最頂端, 相應autoreleased object就會放入其中. 當pool drain的時候, 它就會從stack的頂端移除, 並且release掉其包含的objects.