在不需要立即回收对象的情况下,应该使用autorelease。
与此相对,如果需要立即释放对象应该使用release。
像作为返回值的对象这样的,是需要被调用方调用的,所以在该对象生成完返回,并在被调用之前这段时间内是没有人调用它的,但是不能释放它,所以在这种情况下它需要被autorelease。
再说得通俗一点就是autorelease可以延迟释放。
作者举的例子是一个非常简单的方法,方法里面有个局部对象。我在想这个方法调用完以后不就被弹出调用栈了嘛,里面的局部变量不就自行销毁了吗。为啥作者说会导致内存泄漏呢?
我想大概是因为Objective-C对象的实质都是指针变量,它们都是在堆上分配的内存,所以它不同于普通的栈里面的变量那样会随着调用栈中方法的弹出而被销毁吧。