Runtime源碼 —— 概述和調(diào)試環(huán)境準備

關(guān)于runtime的文章已經(jīng)有很多很多了,有些也寫的很詳細,但紙上得來終覺淺,我還是決定自己動手學(xué)一學(xué),并且記錄下這個過程。

這一系列準備寫的內(nèi)容,更多的是寫給我自己看。

第一篇文章,決定寫寫OC的運行時,也就是runtime。
這東西正常幾乎接觸不到,最常用的應(yīng)該算是在category中添加property時,使用的AssociatedObject。蘋果自己在runtime官方文檔中也說了:

Typically, though, there should be little reason for you to need to know and understand this material to write a Cocoa application.
翻譯:會不會這玩意兒無關(guān)緊要。

但畢竟runtime也算是整個OC的基礎(chǔ),理解runtime對理解這門語言有很大的幫助,我也想以此為切入點,提高一下閱讀源碼的能力。

runtime的內(nèi)容很多,一篇肯定寫不完,本文先就目前我對runtime的理解做一點簡單的介紹,后面隨著源碼的閱讀會分成多篇來詳細分析。

runtime概述

OC是一門動態(tài)語言,OC盡可能多的將工作留到了運行時,而不是在編譯期和鏈接期,這賦予了OC很多強大的功能,這也是runtime所要做的工作。

runtime可以看做是一個庫,主要由c和匯編來實現(xiàn),我們在OC里面所寫的類,方法,屬性等等在runtime層面都會轉(zhuǎn)化成c的結(jié)構(gòu)體。
官方文檔中說通常我們會通過三個方面與runtime打交道:

  1. OC源代碼
  2. NSObject提供的相關(guān)方法
  3. runtime庫提供的各種api

第1個方面就不說了,第2和第3部分是這個系列的重點。我會分析正常寫OC代碼接觸較多的,比如類(class),方法(method),屬性(property),協(xié)議(protocol),分類(category),自動釋放池(autoreleasepool),引用計數(shù)(retain,release等),初始化(load,alloc,init,new等)等這些內(nèi)容的源代碼。

希望通過對runtime的研究能夠加深對OC的理解,戒掉淺嘗輒止的壞毛病,走上造輪子的道路。

調(diào)試環(huán)境準備

想要學(xué)習(xí)runtime,必須有一個可以運行的環(huán)境才行,蘋果官方的源代碼沒法編譯,這里有可以運行的runtime source code。在最新的Mac OS 10.12.2 + Xcode 8.2.1環(huán)境下有效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,776評論 0 9
  • 參考鏈接: http://www.cnblogs.com/ioshe/p/5489086.html 簡介 Runt...
    樂樂的簡書閱讀 2,158評論 0 9
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 25,565評論 7 249
  • 我的父親,是一位農(nóng)民,是一位年過花甲的老人。我和父親不一樣,他屬猴,我屬牛,他脾氣大,我懦弱。小時候,我不喜歡父親...
    草石閱讀 128評論 0 3