消息發送流程圖
設定消息接受者爲receiver
圖是用markdown畫的,適配可能有點問題,瀏覽器頁面放大看好一些
這個過程很多博文都介紹過,在此不再累贅.我們只提煉出裏邊需要我們注意的內容即可.
總結一下
- 1,方法的調用都是通過
objc_msgSend(receiver,SEL...)
做到的,OC的方法中有兩個默認值,self
, _cmd
- 2,方法在類中查找的過程中會優先去
cache
中,然後再去method_list
查找,如果都沒有,沿着繼承鏈,遞歸查找
- 3,如果在繼承鏈上沒有找到,那麼就進入消息轉發過程
- 4,如果找到了,方法會被記錄到cache中,方便下次查找
- 5,其實在查找方法的過程中,Runtime還做了各種異常處理,比如class不存在,class沒有初始化等等