确定Objective-C方法在运行时是否为可变参数

Eci*_*ana 5 runtime objective-c variadic-functions objective-c-runtime method-signature

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

bbu*_*bum 6

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

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

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

strings asdfasdfasdf 
Boogity
methodWithOneIntArg:
variadicMethodWithIDSentinel:
v20@0:8i16
v24@0:8@16
Hello, World!
Run Code Online (Sandbox Code Playgroud)

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

Boogity
methodWithOneIntArg:
variadicMethodWithIDSentinel:
v20@0:8i16
Hello, World!
Run Code Online (Sandbox Code Playgroud)

所以,不,没办法说出来.