iOS-内存管理

简述内存管理基本原则

之前:OC内存管理遵循“谁创建,谁释放,谁引用,谁管理”的机制,当创建或引用一个对象的时候,需要向她发送alloc、copy、retain消息,当释放该对象时需要发送release消息,当对象引用计数为0时,系统将释放该对象,这是OC的手动管理机制(MRC)。目前:iOS 5.0之后引用自动管理机制——自动引用计数(ARC),管理机制与手动机制一样,只是不再需要调用retain、release、autorelease;它编译时的特性,当你使用ARC时,在适当位置插入release和autorelease;它引用strong和weak关键字,strong修饰的指针变量指向对象时,当指针指向新值或者指针不复存在,相关联的对象就会自动释放,而weak修饰的指针变量指向对象,当对象的拥有者指向新值或者不存在时weak修饰的指针会自动置为nil。

内存管理的范围

任何继承自NSObject的对象都需要管理内存(因存放在堆里面),基本数据类型int、float、double、char、结构体struct以及枚举enum都不需要管理内存(因存放在栈里面)

  • 堆: 一般由程序员分配释放内存,若程序员不释放,程序结束时可能由OS释放,其操作方式类似于数据结构中的链表
  • 栈: 由操作系统自动分配释放,存放函数的参数值,局部变量值等,其操作方式类似于数据结构中的栈(先进后出)

内存管理的概念

定义:高效快速的管理内存,在适当的时候回收和释放内存资源
MRC中, 使用"引用计数机制", 需要手动管理内存
ARC中, 使用"强弱引用机制", 系统自动在合适的地方加上retain,release.
常见的引起内存泄漏的原因:
循环引用
大循环

内存管理的几个原则是什么?

谁创建,谁释放,谁引用,谁管理
在MRC中,一次retain必须对应一次release消息
在ARC中强弱引用(注意strong / weak关键字)
当strong修饰的指针指向新值或者不复存在时,其相关联的对象会自动释放
当weak修饰的对象,其拥有者指向新值或者不复存在时,weak修饰的对象会自动置为nil

https://juejin.im/post/59da33666fb9a00a496e955c

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容