黑马程序员---OC学习笔记之ARC的概念及原理

------Java培训、Android培训、iOS培训、.Net培训--------

一、ARC的概念及原理

1、指针的分类

1)强指针:默认情况下,所有的指针都是,关键字strong

2)弱指针:__weak关键字修饰的是弱指针

声明一个弱指针如下:

__weakPserson *p;

 

 

2、什么是ARC?

1)Automatic Reference Counting,自动引用计数,即ARC。在使用ARC非常简单,只要像往常那样编写代码,只不过永远不用写retain,release和autorelease这三个关键字就好了,这就是ARC的基本原则。XCode默认使用ARC

2)当ARC开启时,编译器将自动在代码合适的地方插入retain,release和autorelease,而作为开发者,完全不需要担心编译器会做错,除非开发者自己错用了ARC了。

3)ARC与其他语言的”垃圾回收“机制不同,【ARC是编译特性】,【垃圾回收是运行时特性】

 

3ARC工作原理及判断准则

 

ARC的判断准则】

只要没有强指针指向对象,对象就会被释放

【注意】当使用ARC的时候,暂时忘记【引用计数器】,因为判断标准变了

 

4ARC机制下:对象没有强指针指向,会立即释放


5、ARC机制判断

【注意】也可以直接查看项目信息,ARC是否是yes

1)不允许调用release方法

2)不允许调用autorelease

3)不允许调用[super dealloc],但是可以重写dealloc方法

4)不允许调用retainCount


6、ARC下单对象内存管理【重点】

1ARC机制下:对象没有强指针指向,会立即释放

2、在ARC机制下,如果

    @autoreleasepool {
        Student *st = [Student studentWithAge:24];
       // __strong Student *st2 = st;
       // Student st2 = st;
        //在ARC机制下:对象没有强指针指向,会立即释放
        //弱指针会被赋值为nil
        __weak Student *st3 = st;
   }
7、 ARC 下循环引用问题

1、【解决方案】一端使用strong,一端使用weak

2、ARC下@property参数问题

【strong强指针】用于OC对象,相当于MRC中的retain


【weak弱指针】多用于UI控件


8、ARC使用特点及注意事项

8.1、ARC特点总结

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

2)允许重写dealloc,但是不允许调用[super dealloc]

3@property的参数:

strong:相当于MRC机制中的retain(适用于OC对象),成员变量是强指针

weak:相当于MRC机制中的assign(适用于OC对象),成员变量是弱指针

assgin:适用于非OC对象类型,即基础类型

 

8.2ARC使用注意事项

1)ARC中,只要弱指针指向的对象不在了,就直接把弱指针做清空(赋值为nil)操作

2__weakPerson *p = [Person new];这样做不合理。对象一创建出来就会被释放掉,对象释放后,OC把指针设置为nil

3)ARC中在property参数处不在使用retain,而使用strong或weak,在dealloc中不在需要[super dealloc]

@property (nonatomaic, strong) Dog *dog;这意味着生成的成员变量_dog是一个强指针,相当于以前的retain

4)如果是一个弱指针,则要换成weak


9、ARC模式下如何兼容非ARC的类

方法:

设置MRC文件的【compiler flag-fno-objc-arc







你可能感兴趣的:(Objective-C基础)