ARC机制
来源:互联网 发布:淘宝极有家有没有假货 编辑:程序博客网 时间:2024/05/21 22:32
iPhone4之后,iOS4.3之后才出现ARC机制
一:基本概念: ARC简单,不用程序员再去管理内存,有两个比较重要的概念
》1:强指针 :strong
》2:弱指针:weak
注意:
只要有强指针指向一个对象,那么系统就不会回收该对象
只要没有强指针指向对象,系统立即回收该对象 // 与java的垃圾回收机制的不同
弱指针不影响对象被回收
默认情况下,所有的指针都是强指针类型
还可以重写dealloc方法,来进行检查
-(void)dealloc
{
// [super dealloc]; 不能够再调用
//release ,retain 在ARC机制中不能够再去手动调用
//上面的都是系统自动调用了
NSLog(@"Person 被释放了");
}
》1: //创建出来就会被释放掉,因为没有强指针指向该对象
__weak Person *p =[[Person alloc]init];//这一句代码之后对象被回收
》2:弱指针
Person *p =[[Person alloc]init];
__weak Person *p1=p;
p=nil; //这一句代码之后对象被回收
》3:强指针
void test(Person *v)//Person *v=p;
{
v=nil;
}
Person *p =[[Person alloc]init];
test(p);
p=nil; //这一句代码之后对象被回收
》4:强指针
Person *p =[[Person alloc]init];
p=nil; //这一句代码之后对象被回收
》5:强指针
Person *p =[[Person alloc]init];
Person *p1=p;//这里总共有两个强指针指向该对象 ,Person *p 和Person *p1
p=nil;//这里还有一个强指针指向该对象,Person *p1,不会回收对象
二:ARC机制下的组合关系
创建Person,Car ,继承自NSObject
//ARC机制中strong对应手动内存管理的retain关键字(一定都是应用在对象类型变量上)
//ARC机制中的weak对应 手动内存管理的assign关键字(一定都是应用在对象类型变量上)
@property(nonatomic,strong) Car *car; //强指针类型的对象,会影响对象的回收
@property(nonatomic,weak) Car *car1;//弱指针类型的对象,不会影响对象的回收
@property(nonatomic,assign) Car *car2; //造成疑惑,会导致许多程序员搞不清这个变量到底是strong类型,还是 weak类型,ARC中不要使用assign,只需用strong和weak
//ARC机制下 基本数据类型 的@property参数使用,与手动内存管理完全一致
@property(nonatomic,assign) int age;
三:手动内存管理转换成ARC机制(小项目)
依次点击 Edit > Refactor > Convert to Objective-C ARC ,选中,Check,Next,Save,就完成了
四:ARC机制与非ARC机制(第三方框架等)共存
选中项目,在Build Phases 下的Compile Sources选中非ARC的文件,在方框中写上 -fno-objc-arc ,就可以共存了
五:ARC类互相引用问题
当出现类循环引用的时候,只需要把一方的strong引用改为weak,并且在.h文件中使用@class 类名 的方式,通知.h文件类的存在
如果需要用到类中的方法,在.m文件中使用 #import " 类名.h"
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- ARC机制
- arc机制
- ARC机制
- XCode ARC机制
- ARC机制详解
- ARC机制详解
- ARC 机制分析
- OC的ARC机制
- 关于ARC机制
- OC ARC机制
- IOS ARC 机制
- 深谈ARC机制
- hibernate的各种保存方式的区别 (save,persist,update,saveOrUpdte,merge,flush,lock)等
- 营改增相关知识
- ftp telnet 自动批量
- 并发框架Disruptor译文
- 一页纸说清楚“什么是深度学习?”
- ARC机制
- word break
- centos下nginx启动脚本和chkconfig管理
- HDU 3045 Picnic Cows (斜率优化DP)
- STM32L1XX使用HAL_UART_Transmit_DMA发送串口数据
- Mac 修改Host 绑定host
- 搜狗拼音输入法可以打出㎡(上标这种效果)
- 如何面试到真正的开发人员
- 标准C++中的string类的用法总结