![Avatar notebook default](https://cdn2.jianshu.io/assets/default_avatar/avatar-notebook-default-640f7dde88592bdf6417d8ce1902636e.png)
我們都知道栖茉,程序啟動就會創(chuàng)建一個主線程來執(zhí)行程序谒撼,我們先看一下默認(rèn)開啟的主線程的相關(guān)信息胖喳。在main函數(shù)打一個斷點丸边,看函數(shù)調(diào)用棧: 可以看到當(dāng)前...
_objc_init objc源碼入口就是_objc_init凸舵,接下來我們分析下這個函數(shù): 首先祖娘,一個靜態(tài)變量保證函數(shù)內(nèi)部只會被執(zhí)行一次。 en...
我們已經(jīng)研究了objc_msgSend從匯編快速查找緩存流程贞间,慢速查找流程贿条,動態(tài)方法決議流程,如果這幾個流程下來都沒找到合適的執(zhí)行方法增热,接下來就...
首先我們先看以下代碼: 編譯器優(yōu)化優(yōu)化的是什么呢,優(yōu)化的是底層代碼執(zhí)行邏輯胧辽,使項目執(zhí)行更加高效峻仇。匯編是最接近底層的代碼,所以我們從匯編來看編譯器...
線程與進程 線程是進程的基本執(zhí)行單元邑商,一個進程所有任務(wù)都在線程中執(zhí)行 進程想要執(zhí)行任務(wù)摄咆,必須得有線程,進程至少要有一條線程 程序啟動會默認(rèn)開啟一...
想要了解應(yīng)用程序加載人断,我們需要了解下面幾個問題: 我們寫的代碼是如何加載到內(nèi)存的吭从? 我們使用的動靜態(tài)庫是如何加載到內(nèi)存的? objc是如何啟動的...
我們在objc_msgSend匯編流程[http://www.reibang.com/p/2adbfbd398a2]分析了緩存的查找流程恶迈,緩存...
編譯時和運行時 編譯時:顧名思義就是正在編譯的時候 . 那啥叫編譯呢?就是編譯器幫你把源代碼翻譯成機器能識別的代碼 .(當(dāng)然只是一般意義上這么說...
要研究objc_msgSend實現(xiàn)原理涩金,我們就需要在源碼中找實現(xiàn),全局搜索objc_msgSend。因為有好多架構(gòu)實現(xiàn)步做,而真機架構(gòu)arm64副渴,所...