前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Objective-c内存管理学习总结

Objective-c内存管理学习总结

作者头像
江中散人_Jun
发布2022-03-08 13:52:58
2600
发布2022-03-08 13:52:58
举报
文章被收录于专栏:云原生布道专栏

1 内存管理思考方式

1、 自己生成的对象,自己持有,以alloc、new、copy、mutablecopy开头的方法;

2、 非自己生成的对象,自己也能持有,通过retain方法;

3、 不再需要自己持有的对象时,将其释放,用release方法;

4、 非自己持有的对象,无法释放;

2 Autorelease方法

Autoreleasepool的作用是:避免频繁申请/释放内存。

调用autorelease方法,可使取得的对象存在,但自己不持有。在对象超出指定生存范围时能够自动并正确地释放——通过将对象注册到autoreleasepool中实现,在最近的pool结束时,自动调用release方法释放对象。

特别说明:在函数返回值时,调用autorelease方法后,返回值对象的释放机制——在每一次事件触发时(即一个运行循环runloop),系统会自动生成一个autoreleasepool,在事件响应结束时,通过释放此pool,来释放那些所调用的函数产生的对象。

网友解释:在Iphone项目中,大家会看到一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的理解,岂不是所有autorelease pool里的对象在程序退出时才release,这样跟内存泄露有什么区别?

答案是,对于每一个Runloop, 系统会隐式创建一个Autoreleasepool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。

那什么是一个Runloop呢? 一个UI事件,Timer call, delegatecall,都会是一个新的Runloop。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 内存管理思考方式
  • 2 Autorelease方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档