OC語言中最為強(qiáng)大的莫過于OC的運(yùn)行時機(jī)制-Runtime,但因其比較接近底層,一旦使用Runtime出現(xiàn)bug,將很難調(diào)試,所以Runtime在開發(fā)中能不用就不用.下面我將介紹一些Runtime在開發(fā)中的使用,已經(jīng)面試可能遇見的面試題.
1.OC語法和Runtime語法的區(qū)別
OC語法和Runtime語法的區(qū)別,換而言之就是OC中我們寫的語句,最終被轉(zhuǎn)換成Runtime中什么樣語句.由于Xcode6之后,蘋果不建議使用Runtime,也就是現(xiàn)在在編譯的時候,runtime的函數(shù)不會提示,需要去配置一下:
// 配置步驟: build Seting -> 搜索msg -> 設(shè)置成NO
創(chuàng)建一個控制臺程序,在自動釋放池中寫如下代碼:
NSObject *objc = [NSObject alloc]; objc = [objc init];
然后切換到終端命令行,執(zhí)行以下步驟:
cd 切換到你想生成的那個根文件的上一級目錄 clang -rewrite-objc main.m // clang -rewrite-objc 目標(biāo)文件
會在該目錄文件下生成一個.cpp文件,打開之后搜索@autoreleasepool(這也就是當(dāng)時為什么創(chuàng)建控制器程序的原因,好查找轉(zhuǎn)換后的代碼在哪兒),就會找到轉(zhuǎn)換后的代碼: