ARC

什么是ARC?

ARC的全称Auto Reference Counting. 也就是自动引用计数。那么,为什么要有ARC呢?

Objective C的引用计数理解起来很容易,当一个对象被持有的时候计数加一,不再被持有的时候引用计数减一,当引用计数为零的时候,说明这个对象已经无用了,则将其释放。

ARC :ARC 是编译器特性,当编译器发现retain或者alloc,自动帮我们插入内存管理代码:release,

引用计数分为两种:

  • 手动引用计数(MRC)

  • 自动引用计数(ARC)

比如如下ARC代码:

NSObject * obj;
{
    obj = [[NSObject alloc] init]; //引用计数为1
}
NSLog(@"%@",obj);

等同于如下MRC代码

NSObject * obj;
{
    obj = [[NSObject alloc] init]; //引用计数为1
    [obj relrease]
}
NSLog(@"%@",obj);

 

ARC它的判断准则:只要没有强指针指向对象,对象就会被释放

    指针分两种:

 

             强指针:默认情况下都是强指针,__stong(双下划线)

             弱指针:__weak

             __weak Person *p = []; NSLog(@"%@",p);  //  错误的写法

 

两端循环引用的时候:

   ARC:

       一端用strong,另一端weak

   非ARC:

       一端用retain,另一端assign

ARC :总结

     1>不允许调用release,retain,retainCount

 

     2>可以重写dealloc,但是不可以调用[super dealloc];

 

     3>@property参数

 

     *strong:成员变量是强指针(适用于OC对象,默认的)

 

     *weak:成员变量是弱指针(作用跟assign一样)(适用于OC对象)

 

     *assign:非对象

 

posted @ 2018-05-18 16:46  懒猫口米  阅读(585)  评论(0编辑  收藏  举报