黑马程序员技术交流社区
标题: 每日小结:autorelease用法及需要注意的问题 [打印本页]
作者: 崔石炫 时间: 2014-9-26 23:18
标题: 每日小结:autorelease用法及需要注意的问题
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的内存管理原则,否则可能出现野指针错误
作者: 崔石炫 时间: 2014-9-26 23:21
- #import “Person.h”
- int main()
- {
- Person *p;
- @autoreleasepool{
- p = [[[Person alloc] init] autorelease]; // autorelease方法延迟release操作至自动释放池被销毁时,此时对象计数器值不发生改变
- p.age = 10;
- } // 自动释放池在此行被销毁,此时对池中的所有对象做一次release操作,此时对象计数器的值才真正-1
- return 0;
- }
复制代码
作者: 七年级生 时间: 2014-9-26 23:27
咱俩复习进度差不多啊 感觉入学考试难。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |