国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

iOS開發(fā)系列-ARC淺解

2019-11-14 19:54:04
字體:
來源:轉載
供稿:網友

一、什么是 ARC ?

所謂ARC就是Automatic Reference Counting , 即自動引用計數。ARC是自iOS5引入的。ARC機制的引入是為了簡化開發(fā)過程的內存管理的。相對于之前的MRC (Manual Reference Counting) , ARC機制顯得更加自動化。在使用ARC開發(fā)過程中,開發(fā)者只需考慮strong / weak 的使用,不再需要考慮對象何時要retain,release/autorealease。使用ARC一般不會降低程序的效率。

二、ARC的工作原理

ARC一個很重要的原則是:只要某個對象被任一strong指針指向,那么它將不會被銷毀。如果對象沒有被任何strong指針指向,那么就將被銷毀

ARC是基于引用計數的,當某個對象被一個strong指針指向時,它的計數+1。當沒有strong指針指向時,其計數為0,此時對象會被銷毀。只要一個對象有至少一個strong指針指向時,它就不會被銷毀。但ARC容易造成一個 Strong Reference Cycle 的問題,這樣即使AddBook 和 Entry 這兩個對象都不再使用了,但是由于ARC機制,這兩個對象都互相有strong指針指向,所以這兩個對象都不會被回收,從而造成內存無法被釋放。

針對上面的情況,有一種解決方法:在其中一個對象中引入weak,替換其strong

引入weak后,當entry使用完后,由于指向AddrBook沒有strong指針,所以AddrBook會首先被釋放,然后由于AddrBook被釋放,指向Entry的Strong指針也會銷毀,此時沒有指向Entry的strong指針,所以Entry也會被釋放。這樣就不會出現內存無法被釋放的情況。

這里就有一個問題了,什么時候應該用strong,什么時候應該用weak呢?看以下解析:

如圖所示,ViewController直接持有View,所以ViewController應該要有一個strong指向view。同理,view直接持有subviews,所以也應該要有strong指向subviews。由于viewcontroller要使用subviews對象,但又不想直接持有subviews,所以只好通過weak指向subviews。這樣的話,可以在viewcontroller中不改變view的持有關系,就可以使用subviews對象。從圖中可以得出一個通用的規(guī)律:對于有直接持有的關系,持有者要通過strong指向被持有者。對于有間接持有關系的,間接持有者需通過weak指向間接被持有者。

 

參考文章:http://www.raywenderlich.com/5773/beginning-arc-in-ios-5-tutorial-part-2

        http://onevcat.com/2012/06/arc-hand-by-hand/


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 蒙自县| 祁连县| 陇川县| 盖州市| 行唐县| 安康市| 石棉县| 民和| 鄂托克前旗| 内丘县| 雅江县| 疏附县| 石景山区| 子长县| 泗阳县| 确山县| 信阳市| 佛冈县| 广南县| 那坡县| 肥东县| 昌吉市| 睢宁县| 彰化市| 江川县| 济阳县| 桦川县| 青川县| 石家庄市| 开化县| 鄂州市| 平和县| 古田县| 遵义市| 宁明县| 五莲县| 会宁县| 格尔木市| 高唐县| 长汀县| 米林县|