autorelease对象方法的作用:延迟对象释放的时间,调用的返回结果为对象本身 @autoreleasepool{}自动释放池:由系统创建,可嵌套使用,以栈的形式存放,被销毁时,对池中的所有对象做一次release操作 参考以下代码: - <p class="MsoNormal"><span lang="EN-US">#import “Person.h”</span></p>
- <p class="MsoNormal"><span lang="EN-US"> </span></p>
- <p class="MsoNormal"><span lang="EN-US">int main()</span></p>
- <p class="MsoNormal"><span lang="EN-US">{</span></p>
- <p class="MsoNormal"><span lang="EN-US"> Person
- *p;</span></p>
- <p class="MsoNormal"><span lang="EN-US"> @autoreleasepool{</span></p>
- <p class="MsoNormal"><span lang="EN-US"> p
- = [[[Person alloc] init] autorelease]; // autorelease</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
- mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
- Calibri;mso-hansi-theme-font:minor-latin">方法延迟</span><span lang="EN-US">release</span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
- mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
- Calibri;mso-hansi-theme-font:minor-latin">操作至自动释放池被销毁时,此时对象计数器值不发生改变</span></p>
- <p class="MsoNormal"><span lang="EN-US"> p.age
- = 10;</span></p>
- <p class="MsoNormal" style="text-indent:21.0pt"><span lang="EN-US">} // </span><span style="font-family:宋体;mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;
- mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:
- Calibri;mso-hansi-theme-font:minor-latin">自动释放池在此行被销毁,此时对池中的所有对象做一次</span><span lang="EN-US">release</span><span style="font-family:宋体;mso-ascii-font-family:
- Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:
- minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin">操作,此时对象计数器的值才真正</span><span lang="EN-US">-1</span></p>
- <p class="MsoNormal"><span lang="EN-US"> </span></p>
- <p class="MsoNormal"><span lang="EN-US"> return
- 0;</span></p>
- <p class="MsoNormal"><span lang="EN-US">}</span></p>
复制代码
autorelease的用法: * 将对象放入自动释放池中 * 当自动释放池被销毁时,对池中的所有对象做一次release操作 * 返回对象本身 * 调用autorelease方法后,对象的引用计数器不会发生变化,因为release并没有马上执行,而是延迟到了自动释放池被销毁时 autorelease的好处: * 无需精确控制release的调用时间 autorelease的注意点: * 尽量手动使用release方法管理内存 * 占用内存较大的复杂对象,建议手动管理,不要随便使用autorelease方法 * 占用内存较小的对象,autorelease方法对内存影响不大,为了性能,尽量手动调用release进行内存管理 * 使用autorelease时,还是要遵循一个alloc对应一个release/autorelease的内存管理原则,否则可能出现野指针错误
|