簡體   English   中英

如何從被調用的方法實現創建NSInvocation?

[英]How to create an NSInvocation from a called method implementation?

我有一個看起來像這樣的函數:

void myMethodImpl(id self, SEL _cmd, ...)

我使用它作為類的方法的實現

class_addMethod(aClass, aSelector, (IMP)myMethodImpl, types);

所以當使用選擇器aSelector將消息發送到aClass時,會調用myMethodImpl 現在,我想創建一個包含myMethodImpl所有參數的NSInvocation。

有沒有一種從參數列表創建NSInvocation的簡單方法,還是我必須檢查每個元素的類型並相應地添加它?

既然你要在類中添加一個方法,為什么不添加/ swizzle forwardInvocation:相反? 此時,運行時將很好地為您構建調用。

這是不可能的。 一個簡單的谷歌搜索顯示這篇文章:

http://www.wincent.com/a/about/wincent/weblog/archives/2006/03/nsinvocation_an.php

這清楚地解釋了va_args如何不能正確使用NSInvocation。

確實有可能。 請參閱https://github.com/rlopezdiez/TMInstanceMethodSwizzler/blob/master/Classes/TMInstanceMethodSwizzler.m中的actionSelectorImplementation函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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