1. 程式人生 > >發送消息vs函數調用

發送消息vs函數調用

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函數調用