Consider that you are returning an object you've created (and therefore own) to a caller. If it's released inside your method, the returning object will be an invalid one. On the other hand, there is the basic rule that you have to release the objects you own; then, how do you release them? Simply put the object in the autorelease pool. The object is then released when the autorelease pool is drained.
We will cover the following topics in this chapter:
Understanding the autorelease pool mechanism
How autorelease pool helps
Autoreleased classes
Autoreleased pool blocks and threads
Memory model in Objective-C
ARC with weak references