简述内存管理基本原则
之前: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
网友评论