發送消息vs函數調用
阿新 • • 發佈:2018-02-02
containe tab apple lai cocoa padding nds ner post
消息發送:對象處理消息;
消息發送的selector作為消息的一部分,在對象的運行時底層參與了消息分發,最終完成動態函數調用。
objc_msgSend(void /* id self, SEL op, ... */ )
id objc_msgSend ( id self, SEL op, ... );
函數調用:符號與函數地址綁定並執行。
在蘋果官方文檔《Objective-C Runtime Programming Guide》中提出和Objective-C運行時交互有三種方式,其中最底層的一種方式就是直接使用runtime的函數。我們下面就來看下和發送消息直接相關的幾個函數:
1 2 3 4 5 |
objc_msgSend
objc_msgSend_fpret
objc_msgSend_stret
objc_msgSendSuper
objc_msgSendSuper_stret
|
我們看到他們都是以objc_msgSend開頭的,也就是Objective-C“消息發送”的意思,我們就來看最基礎的,也就是第一個。
1 |
id objc_msgSend ( id self, SEL op, ... );
|
發送消息vs函數調用