MRC
为什么要有内存管理?
不对内存管理的话会造成内存的泄露
内存管理主要是对内存中的哪个区进行 管理?为什么? 全局变量没初始化在bss段 初始化之后在数据区
堆区,堆区的内存由程序员手动申请和释放,如果不进行管理会造成僵尸对象从而内存泄露.
内存管理的范围?
对继承NSObject的对象进行管理,对其他基本类型无效.
什么是引用计数器?
用来计算当前对象的拥有者的个数.
系统是通过什么来管理一个对象的内存的?
引用计数器的值
系统如何引用计数器的操作?
retain使计数器加一 release 使计数器减一
内存管理的原则?
1, 只要还有人在使用某个对象,那么这个对象就不会被回收
如果想使用这个对象 应该让对象先retain一次
如果不想使用这个对象了,应该让这个对象release
2, 谁创建,谁release 这个谁指的是对象类型的指针
3,谁retain 谁release 这个谁指的也是对象类型的指针 retain 之后返回的是一个对象
内存管理研究的内容?
野指针 1)定义指针没有被初始化 2)对象空间被释放了但是指针变量还在
内存泄露 栈区的变量被释放,而堆区的对象没有被释放
如果一个对象被释放了这是这个对象就叫僵尸对象
如何避免野指针?(野指针是指向垃圾内存的指针,空指针是指向NULL的指针)
1,开启僵尸对象检测
2,使指针指向nil
nil/Nil/NULL的区别
nil 是给对象指针赋值
Nil 是给类对象赋值 class类型
NULL 通用指针
常见对象的内存泄露的原因?
内存泄露的3中情况 (无非就是创建的对象没有及时释放)
1, 创建之后 没有release 局部变量指针释放但是对象没有释放
2,retain 之后没有release
3,不当的使用nil 造成对象指针无法retain 和release 从而造成内存泄露
4,在方法的内部retain 但是没有release 也会造成内存泄露
类与类组合的三个关系:组合 ,依赖,,关联
栈区的已经被回收,堆区的没有被释放 叫内存泄露
|