【发布时间】:2026-01-11 11:30:01
【问题描述】:
有没有办法在运行时查明给定方法是否是可变参数类型? method_getTypeEncoding() 之类的东西;这不会告诉我一个方法是否接受可变数量的参数。或者说有什么诀窍?
【问题讨论】:
-
你能解释一下你想要这些信息的背景吗?我不确定如何在运行时准确找到它,但我也从来不需要构建很多可变参数方法。基本上我得到的可能是你不需要知道并且有一个更大的问题。也许,但我也可能总是错的:)
-
当你在一个veridic方法上调用
method_getNumberOfArguments()会发生什么?我从未尝试过,但也许它会返回一个特殊值(如 -1 或其他值)?另见method_copyArgumentType()。 -
@user1118321
method_getNumberOfArguments返回最小计数,就像它是普通方法一样。 -
AFAIK 不可能通过 method_*、NSMethodSignature,因为可变参数的编码方式与非可变参数相同。 IOW (int)a, ... 被编码为 'i',等于简单的 (int)a(也是 'i')。不支持自省 AFAIK。也许@bbum 可以对此有所了解...
标签: objective-c runtime objective-c-runtime variadic-functions method-signature