Runtime常用方法個(更新中)未完待續。。。

runtime是個很屌的東西,但是也并不是很高深的東西,iOS學到一定程度不可避免的就要搞它了,經過最近幾個月頻繁的學習和去了解,逐漸解開了runtime的神秘面紗,讓我們一探究竟吧。

runtime叫做運行時,好多語言都有運行時,我也不知道除了OC還有啥,哈哈哈,顧名思義,運行的時候,其實也就是程序運行的時候所發生的一些事,OC的運行時主要是消息轉發機制。

OC這個語言我們平時都寫.h和.m,一個是interface一個是implement,我們都在.h定義接口啊,聲明屬性,定義方法啥的,然后.m里面寫上具體的實現細節,我的理解,首先,我們寫的OC,到運行時都變成C語言,然后調用方法都是發消息,大概是有個方法列表,列表里對應有一個方法實現的指針IMP,然后,調用方法就是objc_msgsend,也就是OC中所有方法都是發消息實現的

1.發送消息

// 創建person對象

Person*p = [[Person alloc] init];

// 調用對象方法

[p eat];

// 本質:讓對象發送消息

objc_msgSend(p,@selector(eat));

// 調用類方法的方式:兩種

// 第一種通過類名調用

[Person eat];

// 第二種通過類對象調用

[[Person class]eat];

// 用類名調用類方法,底層會自動把類名轉換成類對象調用

// 本質:讓類對象發送消息

objc_msgSend([Person class],@selector(eat));

原理:方法在runtime里面調用的是

比如:

objc_msgSend([Person class],@selector(eat));

實際上:

objc_msgSend(XXXXXX,@selector(YYYYYY));

XXXX就是就收消息的對象,YYYYY就是就收消息后執行的方法,所以比如這里的@selector()實際上是一個SEL,這個東西好像是對應一個數也不一個字符串的,然后根據這個東西,runtime運行時的時候,找這個方法,然后每個方法對應他的執行代碼的一個IMP指針,然后再執行。

2.交換方法

這個方法的實現主要就是取到方法對應的IMP實現通過method_exchangeImplementations

交換實現,進而實現方法的交換。

3.添加方法

4.不需要引入某個類的頭文件,直接初始化該類對象

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 對于從事 iOS 開發人員來說,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,734評論 7 64
  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,789評論 0 9
  • 參考鏈接: http://www.cnblogs.com/ioshe/p/5489086.html 簡介 Runt...
    樂樂的簡書閱讀 2,166評論 0 9
  • 本文分為4個部分 1.介紹OC和C語言之間的轉換 2.介紹運行時和相關術語 3.介紹消息發送機制已及怎樣找到函數實...
    一片楓葉隨風舞閱讀 322評論 0 1
  • 文|石憶 我們每個人都一樣,都要獨自度過些孤單的日子,你一個人吃飯,每到飯點,都去同一家餐廳,點一份同樣的套...
    石憶_閱讀 626評論 12 22