OC 9 内存管理方式 引用计数机制 内存管理的基本原则 copy的实现

 内存管理方式
1.垃圾回收机制(Garbage  Collection)有系统管理内存,开发人员不需要管理

2.oc从2.0以后,就开始之初垃圾回收机制,但是用于oc开发(苹果电脑的操作系统),我们的ios平台是不支持垃圾回收机制
不支持垃圾回收机制,oc是如何管理内存的呢?
内存不释放就叫内存泄露,oc通过引用计数器管理内存
根据照明设备所做的动作分析:
(1)图中的行为            开灯              需要照明     不需要照明             关灯
(2)对象的操作        生成对象           持有对象      释放对象             对象销毁
(3)oc中的方法    alloc/copy/new     retain      release/autorelease     dealloc

3.图中需要照明的人数就代表引用计数
(1)当第一个人需要照明时,引用计数  +1  0 —>1
(2)当第二个人需要照明时,引用计数  +1  1 >2
(3)当第三个人需要照明时,引用计数  +1   2 >3
(4)当有一个人不需要照明,引用计数 -1    3 >2
(5)当再有一个人不需要照明,引用计数-1  2 >1
(6)当再由一个人不需要照明,引用计数-1  1 >0

4.ios平台下使用引用器如何管理内存,有两种方式
(1)MRC:(Manual  Reference  Count)手动引用计数,有开发人员通过手动引用计数器来管理内存

(2)ARC:(Automatic  Reference  Count)自动引用计数,有系统通过引用计数管理内存

5.学习好MRC是为了更好地使用ARC,ios5.0以后就有了ARC
ARC和MRC
(1)如果工程环境是ARC,而部分文件使用了MRC,使用一个参数-fno-objc-arc
(2)如果工程环境MRC,而部分文件使用了ARC,使用一个参数-fobjc-arc

6.自己创建的对象自己持有
 Person *p= [[Person alloc]init]; alloc会造成对象的引用计数由0-->1

7.如何判断一个对象是否被持有,就看他的引用计数判断对象要不要回收的唯一依据就是计数器是否为0,若不为0则存在。
retainCount:对象的引用计数
NSLog(@"%lu",p.retainCount);
8.如果自己创建的对象不使用时,释放对象使用release
 [p release];//1-->0
[p retain];不能使用[p retaion]让僵尸对象起死复生。
[p release]; 不要过度释放,过度释放,也等于操作僵尸对象

9.retain可以让对象的引用计数加1
非自己创建的对象,自己也能持有

10.方法的基本使用
(1)retain  造成引用计数加1,会返回对象本身
(2)release 造成引用计数减1,没有返回值
(3)retainCount的作用:获取当前对象的计数值
(4)当一个对象被销毁的时候,系统自动调用,在此方法中一定要调用[super delloc]这句话要放到最后

11.概念:

野指针错误:访问了一块坏的内存(已经被回收的,不可用的内存)。

僵尸对象:所占内存已经被回收的对象,僵尸对象不能再被使用。(打开僵尸对象检测)

空指针:没有指向任何东西的指针(存储的东西是

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值