【iOS】—— 引用计数

引用计数

MRC和ARC

引用计数——MRC和ARC两种设计模式

  • MRC:Manul Reference Counting(手动引用计数)
    需要手动管理内存,即手动添加release/retain等内存管理代码,否则,会造成内存泄露
  • ARC:Automatical Reference Counting(自动引用计数)
    iOS中的垃圾回收机制跟其它语言不同,iOS的内存管理机制是Xcode帮我们添加内存管理的代码,不用像MRC那样,手动添加retain/release代码

自动引用计数

在Objective-C中采用Automatic Reference Counting (ARC)机制,让编译器来进行内存管理。在新一代Apple LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在降低程序崩溃、内存泄漏等风险的同时,很大程度上减少了开发程序的工作量。编译器完全清楚目标对象,并能立刻释放那些不再被使用的对象。如此来,应用程序将具有可预测性,且能流畅运行,速度也将大幅提升。

引用计数过程

请添加图片描述

OC 语言使用引用计数来管理内存每个对象都有个可以递增或递减的计数器,如果想某个对象继续存活,那就递增其引用计数,用完之后,就递减其计数,计数变为0,就销毁。

引用计数思考方式

  • 自己生成的对象,自己所持有
  • 非自己生成的对象,自己也能持有
  • 不再需要自己持有的对象时释放
  • 非自己持有的对象无法释放

整个过程中围绕着生成,持有,释放三个词,可以看下图:
在这里插入图片描述

release和autorelease的区别

见下图:
在这里插入图片描述

自己生成的对象,自己持有

id obj1 = [[NSObject alloc] init];

id obj2 = [NSObject new];

使用NSObject类的alloc类方法就能自己生成并持有对象。指向生成并持有对象的指针被赋给变量obj。另外[NSObject new]和[[NSObject alloc]init]是完全一致的。

非自己生成的对象,自己也能持有

//取得非自己生成并持有的对象
id obj = [NSMutableArray array];
//取得的对象存在,但自己不持有对象
[obj retain];
//自己持有对象


源代码中,NSMutableArray类对象被赋给变量obj,但变量obj自己并不持有该对象。使用retain方法可以持有对象。
通过retain方法,非自己生成的对象跟用alloc/new/copy/mutableCopy方法生成并持有的对象一样,成为了自己持有的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值