几个关键方法:
AutoreleasePool 类中的 clear 方法, 在每一帧的最后, 会将_managedObjectArray 中的 autorelease 对象移除, 同时对每个对象执行一边 release 方法
Ref 类的 release 方法中, 对引用计数减 1, 如果引用计数等于 0, 则释放这个对象
AutoreleasePool 其实只保留一帧内创建的 Autorelease 对象, 如果在这一帧内, 该对象的引用计数没有增加, 也就是说没有附加到父节点上, 没有对其执行 retain, 引用计数没有加 1, 仍是创建时候的 1 的话, 那么这个对象在一帧结束时, 调用 release, 就会释放掉
如果这个对象在 clear 之前, 附加到了父节点上, 那么它就不会释放掉, 但是会从池中移除等到它从父节点 remove 的时候, 会执行 release, 从而达到释放内存的目的
来源: http://www.bubuko.com/infodetail-2542378.html