From Apple link :
However, there are three cases where you can use your own abstract pools:
If you are writing a program that is not based on a user interface structure, such as a command line tool.
If you are writing a loop that creates many temporary objects. You can create an autostart pool in a loop to get rid of these objects before the next iteration. Using the autostart pool in a loop helps reduce the maximum memory footprint of the application.
If you create an additional stream. You must create your own auto-advertisement pool as soon as the stream begins; otherwise the application will flow objects. (See "Autorelease Pools and Streams" for details.)
Personally, I created several @autoreleasepool blocks to avoid memory leaks during background synchronization using Core Data, since the framework (which I like) creates a huge amount of auto-implemented objects that MUST be drained to save available memory; )
source share