[
导读]在项目中,会有一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的理解,岂不是所有autorelease pool里的对象在程序退出时才release, 这样跟内存泄露有什么区别?
答案是,对于每一个Runloop,系统会隐式创建一个Autoreleasepool,这样所有的releasepool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autoreleasepool会被销毁,这样这个pool里的每个Object会被release。
那什么是一个Runloop呢?一个UI事件,Timercall,delegatecall,都会是一个新的Runloop。
“Applicationkit”在一个事件循环里会自动创建一个”autoreleasepool”。像鼠标键的按下与释放,所以你编写的代码通常不需要考虑太多这方面的事情。当然,有以下三种情况你会创建与销毁自己的Pool实例:
1,应用不是基于”ApplicationKit”,像”Command-linetool”,因为它并没有内置的”autoreleasepools”的支持。
2,创建线程,你必需在线程开始时创建一个”AutoreleasePool”实例。反之,会造成内存池露(会在以后的文章详细说明线程与池的技巧)。
3,一个循环内创建了太多的临时对象,你应该为他们创建一个”AutoreleasePool”对象,并在下次循还前销毁它们。