Objective-C的runtime機制00-概述


運行時是OC的一個大特性。iOS的Runtime,使得很多本來在編譯階段的事情,放在了運行階段確定。這是OC作為動態(tài)語言的華彩部分.

體驗一下什么是動態(tài)語言

對于靜態(tài)語言,比如下面一段C語言,testEntry函數(shù)中調(diào)用functionA,就執(zhí)行functionA定義的代碼,調(diào)用functionB,就執(zhí)行functionB定義的代碼。編譯鏈接完成之后,執(zhí)行邏輯和順序就固定了。

#include < stdio.h >  
void testEntry()  
{  
    functionA(); // 輸出 I am functionA!
    functionB();  // 輸出 I am functionB!
}   
void functionA()
{
    printf("I am functionA!");  
}
void functionB()
{
    printf("I am functionB!");  
}

而對于動態(tài)語言,比如Objective-C的下面的代碼,在運行的時候,開始調(diào)用functionA,還能好好輸出I am functionA! 經(jīng)過一堆奇怪的操作之后,調(diào)用functionA 卻輸出了 I am functionB!

-(void)testEntry{
    [self functionA];  //輸出 I am functionA !
    // 下面一堆很奇怪的操作
    Method funA_Method =  class_getInstanceMethod([self class], @selector(functionA));
    Method funB_Method = class_getInstanceMethod([self class], @selector(functionB));
    method_exchangeImplementations(funA_Method, funB_Method);

    [self functionA]; //這里卻會輸出 I am functionB !
}

-(void)functionA{
    NSLog(@"I am functionA !");
}

-(void)functionB{
    NSLog(@"I am functionB !");
}

這就是動態(tài)語言的效果。能夠在運行的時候變更代碼的執(zhí)行效果。寫好的代碼,定義好的對象,在運行的過程中都可能發(fā)生改變的。程序跑著跑著,我就不是我了。

Objective-C主要是通過runtime的東西來實現(xiàn)這種動態(tài)性的。

本文試著從以下幾方面說說runtime的事情:

Objective-C的runtime機制01-重要數(shù)據(jù)結(jié)構(gòu)和內(nèi)部關(guān)系圖
Objective-C的runtime機制02-消息機制
Objective-C的runtime機制03-動態(tài)創(chuàng)建和修改類和對象
Objective-C的runtime機制04-category
Objective-C的runtime機制05-常見的使用場景

另外,iOS runtime的源碼可以在這里下載閱讀:
http://opensource.apple.com/tarballs/objc4/

參考文獻

Objective-C Runtime Programming Guide
Objective-C Runtime Reference
《Effective Objective-C 2.0》
《pro multithreading and Management》
南峰子的技術(shù)博客-Objective-C Runtime 運行時
王中周的個人博客-Objective-C runtime之運行時
Understanding the Objective-C Runtime
刨根問底Objective-C Runtime
Type Encodings

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容