iOS runtime探究(五): 從runtime開始深入weak實現機理

來源:互聯網
上載者:User

標籤:細節   number   基本使用   property   .com   markdown   ref   append   閱讀   

你要知道的runtime都在這裡

轉載請註明出處 http://blog.csdn.net/u014205968/article/details/67639341

本文主要講解runtime相關知識,從原理到實踐,由於包含內容過多分為以下五篇文章詳細講解,可自行選擇需要瞭解的方向:

  • 從runtime開始: 理解物件導向的類到面向過程的結構體
  • 從runtime開始: 深入理解OC訊息轉寄機制
  • 從runtime開始: 理解OC的屬性property
  • 從runtime開始: 實踐Category添加屬性與黑魔法method swizzling
  • 從runtime開始: 深入weak實現機理

本文是系列文章的第五篇文章,也是系列文章的最後一篇從runtime開始: 深入weak實現機理,本文主要講解runtime是如何?weak修飾符的。
weak修飾符我們一點也不陌生在開發中經常用到,最主要的作用是為了防止引用迴圈(retained cycle),經常用於blockdelegate,在前面幾篇文章中已經講解了weak的基本使用和引用迴圈,如果有興趣可以參考文章iOS @property探究(一): 基礎詳解、iOS @property探究(二): 深入理解、iOS block探究(一): 基礎詳解、iOS block探究(二): 深入理解,相關方法和特點本文不再贅述了。

weak

weak不論是用作property修飾符還是用來修飾一個變數的聲明其作用是一樣的,就是不增加新對象的引用計數,被釋放時也不會減少新對象的引用計數,同時在新對象被銷毀時,weak修飾的屬性或變數均會被設定為nil,這樣可以防止野指標錯誤,本文要講解的也正是這個特性,runtime如何將weak修飾的變數的對象在銷毀時自動置為nil

那麼runtime是如何?在weak修飾的變數的對象在被銷毀時自動置為nil的呢?一個普遍的解釋是:runtime對註冊的類會進行布局,對於weak修飾的對象會放入一個hash表中。用weak指向的對象記憶體位址作為key,當此對象的引用計數為0的時候會dealloc,假如weak指向的對象記憶體位址是a,那麼就會以a為鍵在這個weak表中搜尋,找到所有以a為鍵的weak對象,從而設定為nil

瞭解了以上知識後就可以深入runtiem代碼來看看具體實現細節,有興趣的讀者可以繼續閱讀。

深入runtime理解weak備忘

由於作者水平有限,難免出現紕漏,如有問題還請不吝賜教。

iOS runtime探究(五): 從runtime開始深入weak實現機理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.