ios c语言编译环境搭建,iOS开发之runtime(一):runtime调试环境搭建
本系列博客是本人的源碼閱讀筆記,如果有 iOS 開(kāi)發(fā)者在看runtime的,歡迎大家多多交流。為了方便討論,本人新建了一個(gè)微信群(iOS技術(shù)討論群),想要加入的,請(qǐng)?zhí)砑颖救宋⑿?#xff1a;zhujinhui207407,【加我前請(qǐng)備注:ios 】,本人博客http://www.kyson.cn 也在不停的更新中,歡迎一起討論
引言
相信接觸過(guò)iOS的同學(xué)對(duì)runtime或多或少都有耳聞。 創(chuàng)建一個(gè)對(duì)象:
[[NSObject alloc] init];
復(fù)制代碼
點(diǎn)擊進(jìn)入其定義:
可以發(fā)現(xiàn)其進(jìn)入了文件 NSObject.h 中
右擊該文件,選擇: show in Finder 可以看到 runtime 暴露給我們的文件:
雖然暴露給我們的不多,但其實(shí)已經(jīng)能提供給我們很多功能,剛剛我們的對(duì)象創(chuàng)建就是一個(gè)典型的功能。 眾所周知, NSObject 對(duì)象是Objective-C語(yǔ)言中幾乎所有對(duì)象的根類(lèi)。換言之,任何一個(gè)對(duì)象的創(chuàng)建都是通過(guò)runtime實(shí)現(xiàn)的,僅此一點(diǎn),runtime的重要性可見(jiàn)一斑,現(xiàn)在的iOS面試也越來(lái)越通過(guò)對(duì)runtime的面試來(lái)區(qū)分iOS開(kāi)發(fā)人員的水平高低。
筆者研究runtime源碼有一段時(shí)間了,隨著研究的深入,對(duì)runtime的實(shí)現(xiàn)也越來(lái)越感興趣,因此想寫(xiě)一套系列教程來(lái)和大家討論runtime的底層實(shí)現(xiàn)。
下載源碼
蘋(píng)果開(kāi)源了runtime的實(shí)現(xiàn),在網(wǎng)站 opensource.apple.com/source/objc… 中可以找到各個(gè)版本的runtime源碼。 但提供的是一個(gè)個(gè)文件,不方便打包下載,網(wǎng)站 opensource.apple.com/tarballs/ob… 中提供了壓縮包的下載。
編譯
下載下來(lái)的runtime源碼是運(yùn)行不了的,缺少一些依賴(lài)文件,找起來(lái)也比較繁瑣。這里筆者fork了一份,供大家參考(該項(xiàng)目編譯過(guò)程大家可以參考這篇文章: objc - 編譯Runtime源碼objc4-680 ):
如圖,打開(kāi)工程后選擇工程debug-objc,點(diǎn)擊run即可。由于debug-objc依賴(lài)于objc(即runtime的源代碼編譯的庫(kù)),因此我們?cè)趍ain函數(shù)中所有Objective-C的代碼會(huì)調(diào)用我們編譯的runtime,從而方便我們調(diào)試。
目錄分析
runtime源碼目錄結(jié)構(gòu)如下:
include 文件夾是我們引入的項(xiàng)目需要的依賴(lài)文件
Public Headers 文件夾是對(duì)外暴露的,點(diǎn)開(kāi)后我們不難發(fā)現(xiàn),和文章開(kāi)頭給出的文件列表一模一樣:
Private Headers 從字面意思了解,是私有的一些方法
Project Headers runtime項(xiàng)目中會(huì)用到的頭文件
Obsolete Headers 一些 孤立 的文件,大部分可刪,只有 hashtable2.h 的文件會(huì)被其他文件使用到。
Obsolete Source 無(wú)實(shí)質(zhì)用處,可全刪
Source 目錄,是runtime的實(shí)現(xiàn)文件集合,后面的文章主要是研究這個(gè)目錄。
小試牛刀
在我們的main.m中,輸入以下代碼:
#import
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSObject *obj = [[NSObject alloc] init];
}
return 0;
}
復(fù)制代碼
打斷點(diǎn)后,我們會(huì)發(fā)現(xiàn)NSObject *obj = [[NSObject alloc] init];方法最終會(huì)調(diào)用到runtime中的NSObject.mm中。也就是說(shuō),對(duì)象的創(chuàng)建都是在NSObject.mm中完成的。 具體實(shí)現(xiàn)流程,會(huì)在后面的文章中逐步揭曉。
總結(jié)
以上是生活随笔為你收集整理的ios c语言编译环境搭建,iOS开发之runtime(一):runtime调试环境搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言 位域 sizeof,含位域结构体
- 下一篇: pic1路AD转换c语言,pic单片机的