[英]How does forwardInvocation: get called?
僅查看Objective-C運行時庫,當消息發送到不響應它的對象時,運行時系統為接收者提供了另一個處理消息的機會。 因此,接收者的forward::
方法(如果實現的話)被調用。 但是,看看NSObject.mm , NSObject
似乎沒有實現forward::
。
那么,如何調用NSObject
的forwardInvocation:
方法,因為當需要轉發時運行時系統調用的唯一東西是forward::
? Foundation是否使用objc_setForwardHandler
( runtime.h )設置一個調用forwardInvocation:
的新處理程序forwardInvocation:
每當發送到NSObject
對象的消息需要轉發時?
在某些時候,早在很久以前,有沒有NSObject
的Objective-C運行。 當語言最初由Brad Cox和Tom Love創建時,他們添加了一個名為Object
的根對象類。 這實現了[Object forward::]
,用於進行消息轉發。
幾年后,NextStep出現並自己添加了該語言,創建了OpenStep框架(后來成為Cocoa)。 NextStep擺脫了Object
類,並將其替換為NSObject
。 其中一個更改是使用forwardInvocation
替換forward::
方法。 Object
類仍然在源代碼中徘徊(正如您所發現的那樣),但我很確定它在iOS或64位OS X應用程序中都不可用。
建議objc_setForwardHandler
用於指示應該使用forwardInvocation
而不是forward::
用於所有NSObjects
,這是正確的。 恐怕我不確定基金會什么時候打電話給我...我會猜測NSObject
初始化。 我也沒有大量使用底層的運行時實現,但希望這至少會有一些幫助嗎?
這篇SO帖子對你的問題有一個更詳細的答案,即當一條消息被發送到一個沒有響應它的對象時會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.