簡體   English   中英

forwardInvocation如何調用?

[英]How does forwardInvocation: get called?

僅查看Objective-C運行時庫,當消息發送到不響應它的對象時,運行時系統為接收者提供了另一個處理消息的機會。 因此,接收者的forward::方法(如果實現的話)被調用。 但是,看看NSObject.mmNSObject似乎沒有實現forward::

那么,如何調用NSObjectforwardInvocation:方法,因為當需要轉發時運行時系統調用的唯一東西是forward:: Foundation是否使用objc_setForwardHandlerruntime.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM