ARC总结

来源:互联网 发布:成都php找工作很难 编辑:程序博客网 时间:2024/05/22 15:11

1.什么是ARC

在ARC之前的MRC方式中,程序员需要手动地键入代码来管理对象的生命周期(主要是正确地销毁对象)。在ARC方式中,由编译器来辅助插入管理对象生命周期的代码,减少了开发工作量并提高了程序的健壮性。

ARC是编译时特性,不是垃圾回收


2.引用计数

oc对象在内存中以结构体的形式存储,结构体中有一个字段refrenceCount(引用计数)用来表示该对象被持有的次数,如果该对象被新的引用持有,则count +1,如果一个引用失效,则count -1,当count数为零的时候 调用dealloc方法来销毁对象。


3.ARC的修饰符

__strong:
修改符默认为__storng。当strong的变量引用某对象时,该对象被retain一次,当strong变量失效时(超出作用域或不在引用某对象),该对象被release一次

__weak:
被weak修饰的变量在引用对象时,对象不retain,引用失效时,对象也不release。有一点特殊的地方是,如果某个对象被销毁时,所有指向它的weak变量都会被置为nil(__unsafe__unretain则不会),这个技术叫做zero weak pointer,它增加的程序的健壮性。

__autoreleasing:
当引用被autoreasing修饰时,编译器会插入autoRelease方法。所以在autoRelease pool销毁时,该对象会调用release方法


4.循环引用

如果程序中存在循环引用,就会导致循环引用中的对象无法被释放,导致内存泄漏。


0 0