iOS Autorelease的深入理解
来源:互联网 发布:青少年计算机编程 编辑:程序博客网 时间:2024/06/05 12:44
(1) 如果你能够真正的理解autorelease,那么你才是理解了Objective c的内存管理。Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。
在Iphone项目中,大家会看到一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的理解,岂不是所有autorelease pool里的对象在程序退出时才release,这样跟内存泄露有什么区别?
答案是,对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的 Autorelease pool会被销毁,这样这个pool里的每个Object会被release。
那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call,都会是一个新的Runloop.
(2)autorelease的妙处在于,它找到了一个合适的时机来释放返回对象,这个时机就是本次消息循环结束的时候。我们只需要在返回对象前,调用autorelease,对象被加入autorelease pool(但没有减少对象的引用计数,所以这时候返回的对象仍是有效的),然后返回,程序继续执行,直到完成本次消息循环之时,再把autorelease pool中记录的临时对象一个个分别release。
(3)对象执行autorelease方法时会将对象添加到自动释放池中 当自动释放池销毁时自动释放池中所有对象作release操作 对象执行autorelease方法后自身引用计数器不会改变,而且会返回对象本身.autorelease实际上只是把对release的调用延迟了,对于每一次autorelease系统只是把该对象放入了当前的autorelease pool中,当该pool被释放时,该pool中的所有对象会被调用Release
- iOS Autorelease的深入理解
- iOS开发autorelease理解
- 对autorelease的理解
- 理解Objective-C的autorelease
- 理解Objective-C的autorelease
- 深入理解IOS的RunLoop
- 理解autorelease
- 理解autorelease
- 理解autorelease
- 理解autorelease
- autorelease 理解
- 对iOS中内存处理的一些理解(retain,copy,assain,release,autorelease)
- 深入理解Objective-C: Autorelease Pool (自动释放池)
- ios autorelease
- iOS autorelease
- 关于autorelease和release的理解
- autorelease pool 和 Runloop的理解
- 关于autorelease pool一个较好的理解
- 做程序猿8个月的感受(一)~
- 从头认识java-8.6 匿名内部类
- 606第九周周六赛 D - Buildings
- rabbitMQ学习笔记(4):pub/sub
- PostgreSQL学习手册(角色和权限)
- iOS Autorelease的深入理解
- oracle学习笔记--pl/sql编程(流程控制)
- USB 描述符详细解析,来自老外网站,比协议描述清晰
- Vss
- 如何在本地搭建maven私服
- Generate Parentheses
- PostgreSQL学习手册(数据库管理)
- lua开发--web页面服务
- Ubuntu下的重要配置文件修改前要先备份