5

有没有办法在运行时找出给定方法是否是可变参数类型?类似的东西method_getTypeEncoding(); 这不会告诉我一个方法是否接受可变数量的参数。或者有什么诀窍可以这么说?

4

1 回答 1

6

罗伯特的评论是正确的。考虑:

@interface Boogity
@end
@implementation Boogity
- (void)methodWithOneIntArg:(int)a {;}
- (void)variadicMethodWithIDSentinel:(id)a, ... {;}
@end

在生成的二进制文件上运行strings(还有 stock main()):

strings asdfasdfasdf 
Boogity
methodWithOneIntArg:
variadicMethodWithIDSentinel:
v20@0:8i16
v24@0:8@16
Hello, World!

如果我将可变参数方法更改为声明为- (void)variadicMethodWithIDSentinel:(int)a, ...,则strings输出变为:

Boogity
methodWithOneIntArg:
variadicMethodWithIDSentinel:
v20@0:8i16
Hello, World!

所以,不,没办法说。

于 2012-07-17T19:58:13.447 回答