首先,需要搞明白2個問題:
- 什么是isa指針
- 消息傳遞機制
isa指針是用于對象指向類對象,類對象指向元類對象的一個指針。而類對象和元類對象中又分別存放對象方法和類方法。 在消息傳遞機制中,就是通過isa指針來尋找到方法的實際調用地址的。
objc在向一個對象發送消息時,runtime庫會根據對象的isa指針找到該對象實際所屬的類,然后在該類中的方法列表以及其父類方法列表中尋找方法運行,然后在發送消息的時候,objc_msgSend方法不會返回值,所謂的返回內容都是具體調用時執行的。 那么,回到本題,如果向一個nil對象發送消息,首先在尋找對象的isa指針時就是0地址返回了,所以不會出現任何錯誤。
更多:iOS面試題合集