35-内存管理

1. 内存管理
内存的作用:存储数据.
1). 如何将数据存储到内存之中.
声明1个变量.然后将数据存储进去.
2). 当数据不再被使用的时候,占用的内存空间如何被释放.
2. 内存中的五大区域
栈: 局部变量. 当局部变量的作用域被执行完毕之后,这个局部变量就会被系统立即回收.
堆: OC对象.使用C函数申请的空间.
BSS段: 未初始化的全局变量、静态变量. 一旦初始化就回收 并转存到数据段之中.
数据段: 已经初始化的全局变量、静态变量. 直到程序结束的时候才会被回收.
代码段: 代码. 程序结束的时候,系统会自动回收存储在代码段中的数据.
栈、BSS段、数据段、代码段存储在它们中的数据的回收,是由系统自动完成的.不需要我们干预.
3. 分配在堆区中的OC对象,是肯定需要被回收的.
iPhone 内存机制.
40M 警告
45M 警告
120M 闪退.
存储在堆中的OC对象,系统不会自动回收. 直到程序结束的时候才会被回收.
4. 内存管理的范围:
只需要管理存储在堆中的OC对象的回收.其他区域中的数据的回收是系统自动管理的.
5. 对象应该什么时候被回收?
当有人使用这个对象的时候,这个对象就千万不能回收.
只有在没有任何人使用这个对象的时候,才可以回收.
6. 引用计数器
1). 每1个对象都有1个属性.叫做retainCount.叫做引用计数器. 类型是unsigned long 占据8个字节.
引用计数器的作用: 用来记录当前这个对象有多少个人在使用它.
默认情况下,创建1个对象出来 这个对象的引用计数器的默认值是1.
2). 当多1个人使用这个对象的时候.应该先让这个对象的引用计数器的值+1 代表这个对象多1个人使用.
3). 当这个对象少1个人使用的时候.应该先让这个对象的引用计数器的值-1 代表这个对象少1个人使用.
4). 当这个对象的引用计数器变为0的时候.代表这个对象无人使用. 这个时候系统就会自动回收这个对象.
7. 如何操作引用计数器.
1). 为对象发送1条retain消息. 对象的引用计数器就会加1. 当多1个人使用对象的时候才发.
2). 为对象发送1条release消息.对象的引用计数器就会减1. 当少1个人使用对象的时候才发.
3). 为对象发送1条retainCount消息. 就可以去到对象的引用计数器的值.
就这样++ -- 当对象的引用计数器变为0的时候,对象就会被系统立即回收.
在对象被回收的时候.会自动调用对象的dealloc方法.
8. 内存管理的分类
MRC: Manual Reference Counting 手动引用计数.手动内存管理.
当多1个人使用对象的时候,要求程序员手动的发送retain消息.少1个人使用的时候程序员手动的发送relase消息.
2011年之前 iOS5之前
ARC: Automatic Reference Counting 自动引用计数.自动内存管理.
系统自动的在合适的地方发送retain relase消息.
我们今天学习的MRC.
学习MRC的理由:
1). 面试必考 100%
2). 早期的APP开发使用的MRC技术.
3). iOS大牛都是从MRC成长起来的. 方便交流.
4). ARC是基于MRC

1. iOS5开始. Xcode4.2开始就支持ARC
Xcode7 默认支持ARC开发.
默认使用的开发方式就是ARC的模式.
关闭ARC开启MRC.
2. 当对象的引用计数器变为0的时候,系统会自动回收对象.
在系统回收对象的时候.会自动的调用对象的dealloc方法.
重写dealloc方法的规范:
必须要调用父类的dealloc方法. 并且要放在最后一句代码.
3. 测试引用计数器.
1). 新创建1个对象,这个对象的引用计数器的值默认是1.
2). 当对象的引用计数器变为0的时候.对象就会被系统立即回收 并自动调用dealloc方法.
3). 为对象发送retain消息 对象的引用计数器就会+1
4. 为对象发送release消息.并不是回收对象.而是让对象的引用计数器-1
当对象的引用计数器的值变为0的时候.对象才会被系统立即回收.

1. 内存管理的重点
1). 什么时候为对象发送retain消息.
当多1个人使用这个对象的时候,应该先为这个对象发送retain消息.
2). 什么时候为对象发送releaee消息.
当少1个人使用这个对象的时候.应该为这个对象发送1条release消息.
2. 在ARC机制下,retain release dealloc这些方法方法无法调用.
2. 内存管理的原则
1). 有对象的创建,就要匹配1个release
2). retain的次数和release的次数要匹配.
3). 谁用谁retain. 谁不用谁release.
谁负责retain 谁就负责relase
4). 只有在多1个人用的时候才retain 少1个人使用的时候才release
有始有终,有加就有减. 有retain就应该匹配1个release 一定要平衡.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值