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.循環引用
如果程序中存在循環引用,就會導致循環引用中的對象無法被釋放,導致內存泄漏。
新聞熱點
疑難解答