這個過程中,都做了什麼呢?
第一階段:預處理(preprocessing),編譯器(compiler),彙編器(assembler),生成mach-o檔案
第二階段:讀取mach-o檔案,載入dylb(linker),初始化runtime(loader)
第三階段:呼叫main函式
第四階段:首屏渲染
第一階段分析:(main函式前1)
預處理
他會處理程式中的巨集定義,依賴關係,和預處理器指令。編譯器
xcode使用llvm編譯器,其前端使用的是clang,他對語意和語法分析,語法樹分析,生成中間**;建立並管理符號表;到此前端工作結束。彙編器
後端在對中間**進行優化,針對不同架構,生成不用的彙編**,最後llvm將這些彙編**輸出生成二進位制可執行檔案(mach-o)。第二階段分析:(main函式前2)
載入器
同時runtime被初始化,當所有依賴庫初始化結束,進行mach-o檔案初始化,這時runtime會對專案中所有類進行類結構初始化,呼叫所有類的+load方法。
最後dyld返回main函式位址,呼叫main函式。第三階段分析:(main函式)
第四階段分析:(main函式後)
在didfinishlaunchingwithoptions中建立window
LeetCode面試題之前序遍歷
給定乙個二叉樹,返回它的 前序 遍歷。示例 輸入 1,null,2,3 12 3輸出 1,2,3 前序遍歷 根節點 左子樹 右子樹 思路 1 2 31 3 5 6 6 77 9 0 棧stack 先進後出 堆heap 先進先出 1 本質 stack是乙個容器 實現了棧的先進後出的特點。2 標頭檔案 ...
面試題 main方法之前幹了什麼
先上一段 package draft public class test public int j print j public test string str public static int print string str public static void main string arg...
騙人的程式面試題?
看到乙個程式設計師面試題,如下 原文見v july v 給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數 要求下排每個數都是先前上排那十個數在下排出現的次數。上排的十個數如下 0,1,2,3,4,5,6,7,8,9 舉乙個例子,數值 0,1,2,3,4,5,6,7,8,9 分配 6,2...