Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取方法参数';Objective-C中的类_Objective C_Ios_Objective C Runtime - Fatal编程技术网

获取方法参数';Objective-C中的类

获取方法参数';Objective-C中的类,objective-c,ios,objective-c-runtime,Objective C,Ios,Objective C Runtime,我需要在运行时获取方法参数的类 有一种方法 - (const char *)getArgumentTypeAtIndex:(NSUInteger)idx; 在NSMethodSignature中,但如果它是对象,则只返回@。我需要得到这个对象的类,实际检测这个对象是否为NSArray。实现这一目标的可能性是什么?您尝试过这个吗 if ([object_you_wanna_check isKindOfClass:([NSArray class])]) 试一试 或 或者使用中描述的高级界面。很久

我需要在运行时获取方法参数的类

有一种方法

- (const char *)getArgumentTypeAtIndex:(NSUInteger)idx;
在NSMethodSignature中,但如果它是对象,则只返回@。我需要得到这个对象的类,实际检测这个对象是否为NSArray。实现这一目标的可能性是什么?

您尝试过这个吗

if ([object_you_wanna_check isKindOfClass:([NSArray class])])
试一试


或者使用

中描述的高级界面。很久以前我就试过了。所以花了一些时间来回复搜索代码。无论如何,这是信息

NSMethodSignature类的getArgumentTypeAtIndex和methodReturnType的返回数据将是“一个C字符串,编码Objective-C类型编码中方法的返回类型。”-根据文档

因此,您需要检查返回的字符数据,并通过下表找到合适的类型

我猜检查编码表会给你答案


快乐编码:)

我不需要检查对象的类。我需要检查对象的方法的参数和类。所以基本上得到方法的签名:NSMethodSignature*sig=[self-methodSignatureForSelector:selector];然后获取所有参数并检测它们的类。如何实现这一点?Olga指出,信息不是由对象运行时存储的,它只存储参数大小(以便NSInvocation可以正确传递)。您所指的是静态分析器,而不是运行时代码;只有参数是一个对象(由
@
表示)这一事实。那么是否有可能以某种方式获得特定的(即使是自定义的)类名呢?
if ([obj isKindOfClass:[MyMclass class]]) {
     //enter code here
}
if ([obj respondToSelector:@selector(myRequiredSelector)]) {
     //enter code here
}