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.循环引用
如果程序中存在循环引用,就会导致循环引用中的对象无法被释放,导致内存泄漏。
新闻热点
疑难解答