If you didn't directly create or copy the object, you don't own it and shouldn't release it . However, because these class methods allocate memory for the object, they are considered to be the owners and are therefore responsible for releasing the object. When you write a method that creates and returns an object, that method is responsible for releasing the object. However, it's clearly not fruitful to dispose of an object before the recipient of the object gets it. What is needed is a way to mark an object for release at a later time, so that it will be properly disposed of after the recipient has had a chance to use it.
Cocoa provides just such a mechanism.
The autorelease method, defined by NSObject, marks the receiver for later release. It can even return the array to its invoker, since the application object defines the bottom of the call stack for your code. The autorelease method thus allows every object to use other objects without worrying about disposing of them. Just as it's an error to release an object after it's already been deallocated, it's an error to send so many autorelease messages that the object would later be released after it had already been deallocated. In this case, only you know when the object is no longer needed, so you need the power to ensure that the object is not disposed of while you are still using it.