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"



0 0
原创粉丝点击