在Objective-C中以编程方式访问方法参数

我们走吧

假设我有以下方法:

 -(void)methodWithVar1:(NSString*)var1 var2:(NSString*)var2;

现在,我当然可以通过直接使用变量名在methodWithVar1:var2:中访问var1和var2。但是我想做的是像methodArgs [0]和methodArgs [1]这样的变量访问方法。

有没有办法做到这一点?我看过runtime.h,但看不到有任何帮助。

我为什么要这样做?

在某些情况下,当调用一个方法时,我想阻止该方法执行,但允许它在其他时间执行。我通过创建一个NSInvocation对象来做到这一点,该对象允许我在需要时“重新调用”该方法。但是,NSInvocation要求我调用setArgument:atIndex:,这必须手动执行。如果方法每次都更改,则需要更新NSInvocation的填充。我想避免手动更新它,并且有一种通用的方式来执行它。

-(void)methodWithVar1:(NSString*)var1 var2:(NSString*)var2{

    if (someCheckToSeeIfICannotRun) {

        NSMethodSignature * methodSignature = 
        [self.class instanceMethodSignatureForSelector:_cmd];

        KWInvocation * invocation = 
        [KWInvocation invocationWithMethodSignature:methodSignature];

        [invocation.invocation setTarget:self];
        [invocation.invocation setSelector:_cmd];
        [invocation.invocation setArgument:&var1 atIndex:2];// This and
        [invocation.invocation setArgument:&var2 atIndex:3];// this, I would prefer to make generic
        [invocation.invocation retainArguments];
        //
        // Store invocation somewhere so I can call it later...
        //
    }
    else {
        // Let the method run as normal
    }
}
Cy-4AH

我认为这可以帮助您:

#import <objc/runtime.h>

void logArguments(const id* selfPtr)
{
    id obj = *selfPtr;
    SEL sel = *(SEL*)(void*)(--selfPtr);

    Method m  = class_getInstanceMethod([obj class], sel);

    for (unsigned int cnt = method_getNumberOfArguments(m) - 2; 0 != cnt; --cnt)
    {
        NSLog(@"arg: %@", *(--selfPtr));
    }
}

您可以logArguments(&self);使用任何方法进行调用,但有一个限制:所有参数都应为Objective-C对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Objective-C中以编程方式访问方法参数

来自分类Dev

在Objective-C中以编程方式更改颜色暗度

来自分类Dev

在Objective-C中以编程方式创建图像

来自分类Dev

在Objective-C中以编程方式添加约束

来自分类Dev

如何以编程方式在Objective C中创建序列?

来自分类Dev

如何访问Objective C未命名参数的某些方法?

来自分类Dev

如何访问Objective C未命名参数的某些方法?

来自分类Dev

Xcode / Objective-c-如何以编程方式查找给定方法的调用者

来自分类Dev

在Objective-C中检查方法参数的最佳方法是哪种?

来自分类Dev

在Objective-C中检查方法参数的最佳方法是哪种?

来自分类Dev

OS X上的Objective-C:以编程方式设置插座

来自分类Dev

如何在Objective c中以相等的宽度在UIView上以编程方式放置2个UIButton?

来自分类Dev

以编程方式生成按钮,而在Objective-C xcode中没有重叠

来自分类Dev

以编程方式生成按钮,而在Objective-C xcode中没有重叠

来自分类Dev

在Objective-C中以编程方式将文本放在图像上

来自分类Dev

在Objective-C中,如何以编程方式获取设备的BuildID

来自分类Dev

块编程iOS Objective c

来自分类Dev

使用NSArray Objective-c中的参数运行方法

来自分类Dev

请求访问Objective-C中的相机

来自分类Dev

访问Objective C中的继承数组

来自分类Dev

从Objective-C中的子类访问ivar

来自分类Dev

匹配无参数Objective-C方法

来自分类Dev

Objective-C方法参数类型安全

来自分类Dev

Objective-C方法参数类型安全

来自分类Dev

?:在Objective-C中

来自分类Dev

在objective-c块中传递参数

来自分类Dev

如何使用UIBezierPath或任何其他方法在Objective-C中以编程方式创建如下所示的自定义矩形?

来自分类Dev

是否可以从Swift / Objective-C中的UIViewController或Storyboard以编程方式获取基本UIViewController的标识符?

来自分类Dev

在iOS 7 / Objective-C中,如何以编程方式将UIPickerView捕捉到其所在的父视图的底部?

Related 相关文章

  1. 1

    在Objective-C中以编程方式访问方法参数

  2. 2

    在Objective-C中以编程方式更改颜色暗度

  3. 3

    在Objective-C中以编程方式创建图像

  4. 4

    在Objective-C中以编程方式添加约束

  5. 5

    如何以编程方式在Objective C中创建序列?

  6. 6

    如何访问Objective C未命名参数的某些方法?

  7. 7

    如何访问Objective C未命名参数的某些方法?

  8. 8

    Xcode / Objective-c-如何以编程方式查找给定方法的调用者

  9. 9

    在Objective-C中检查方法参数的最佳方法是哪种?

  10. 10

    在Objective-C中检查方法参数的最佳方法是哪种?

  11. 11

    OS X上的Objective-C:以编程方式设置插座

  12. 12

    如何在Objective c中以相等的宽度在UIView上以编程方式放置2个UIButton?

  13. 13

    以编程方式生成按钮,而在Objective-C xcode中没有重叠

  14. 14

    以编程方式生成按钮,而在Objective-C xcode中没有重叠

  15. 15

    在Objective-C中以编程方式将文本放在图像上

  16. 16

    在Objective-C中,如何以编程方式获取设备的BuildID

  17. 17

    块编程iOS Objective c

  18. 18

    使用NSArray Objective-c中的参数运行方法

  19. 19

    请求访问Objective-C中的相机

  20. 20

    访问Objective C中的继承数组

  21. 21

    从Objective-C中的子类访问ivar

  22. 22

    匹配无参数Objective-C方法

  23. 23

    Objective-C方法参数类型安全

  24. 24

    Objective-C方法参数类型安全

  25. 25

    ?:在Objective-C中

  26. 26

    在objective-c块中传递参数

  27. 27

    如何使用UIBezierPath或任何其他方法在Objective-C中以编程方式创建如下所示的自定义矩形?

  28. 28

    是否可以从Swift / Objective-C中的UIViewController或Storyboard以编程方式获取基本UIViewController的标识符?

  29. 29

    在iOS 7 / Objective-C中,如何以编程方式将UIPickerView捕捉到其所在的父视图的底部?

热门标签

归档