日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ios c语言编译环境搭建,iOS开发之runtime(一):runtime调试环境搭建

發(fā)布時(shí)間:2024/8/1 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios c语言编译环境搭建,iOS开发之runtime(一):runtime调试环境搭建 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本系列博客是本人的源碼閱讀筆記,如果有 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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。