我明白如何將項目添加到NSAutoreleasePool以及之後如何排空池。但是我的教育缺失的是何時何地應該這樣做。何時何地我應該消耗NSAutoreleasePool?
顯然,在Main中這樣做沒有任何意義,因爲這與從不釋放內存沒有任何區別。但迄今爲止我所閱讀的文檔沒有提供任何其他的指導。
我明白如何將項目添加到NSAutoreleasePool以及之後如何排空池。但是我的教育缺失的是何時何地應該這樣做。何時何地我應該消耗NSAutoreleasePool?
顯然,在Main中這樣做沒有任何意義,因爲這與從不釋放內存沒有任何區別。但迄今爲止我所閱讀的文檔沒有提供任何其他的指導。
main
中的自動釋放池滿足您的應用程序對Cocoa的責任,即自動釋放池始終可用。這個池在主事件循環的每個循環都被排空。
此外,您創建的每個NSThread
必須擁有自己的autorelease池。
除此之外,它只是一個估計在主自動釋放池耗盡之前創建多少個自動釋放對象的問題。您也可以使用儀器查看峯值內存佔用情況,作爲可以使用自動釋放池的進一步證據。
謝謝。整個游泳池的東西對我來說似乎仍然很奇怪,但至少現在我覺得我可以信任它。 – 2012-03-20 19:20:21
您需要手動管理NSAutoreleasePool對象的唯一時間是在線程中運行時。如果線程沒有使用太多內存,那麼在開始時耗盡並在結束時耗盡。否則,消耗每一個如此多的循環迭代。耗盡池之間的迭代次數取決於池中使用的內存量。您越頻繁地使用內存使用效率越高。
如果你正在做這樣的事情,像粒子系統有數以萬計的粒子,那麼你最好不要一直分配釋放內存,而是分配一次,並使用環形緩衝區或類似的東西。
當您在循環中分配自動釋放對象時使用自動釋放池會很有用,這將減少底層自動釋放池的內存消耗高峯。在https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html
上自動釋放池
更多信息張貼一些代碼,我們可以給你指導。你在哪裏使用autoreleasepool?出於什麼目的?等 – MishieMoo 2012-03-20 19:03:10
你真的回答了這個問題:「我應該在哪裏做X?」與「你在做X?」 – 2012-03-20 19:22:15