如何在Objective-C中重写变量方法
我试图扩展一个具有可变方法的类,例如:如何在Objective-C中重写变量方法,objective-c,variadic,variadic-functions,Objective C,Variadic,Variadic Functions,我试图扩展一个具有可变方法的类,例如: - (void)someMethod:(id)arguments, ... ; 在子类中,通过调用原始方法覆盖它,如: - (void)someMethod:(id)arguments, ... { [super someMethod:arguments, ...]; // override implementation ... } 但这不起作用。有人知道怎么做吗?谢谢。与printf/vprintf类似,基地将声明: - (
- (void)someMethod:(id)arguments, ... ;
在子类中,通过调用原始方法覆盖它,如:
- (void)someMethod:(id)arguments, ... {
[super someMethod:arguments, ...];
// override implementation
...
}
但这不起作用。有人知道怎么做吗?谢谢。与
printf
/vprintf
类似,基地将声明:
- (void)someMethod:(id)arguments, ... ;
子类将实现:
- (void)vsomeMethod:(id)arguments vaList:(va_list)vaList;
然后,在其
someMethod:vaList:
的实现中,该基只需调用vsomeMethod:vaList:,因此。。。这是一个类别,还是一个超类?因为类别是扩展的,超类是监督的。通常不可能像这样包装一个变量函数或方法。可能是重复的,请在评论中查看链接的问题:也谢谢,你是对的,它实际上是这样写的:“如果您没有一个与vfprintf类似的函数,它接受一个va_列表而不是一个可变数量的参数,那么您就不能这样做。“谢谢,但在我的情况下,基类不能修改。@TaketoSano这就像实现一个可变函数,但在创建后,您可以将va_列表
转发到vsomeMethod:vaList:
,而不是枚举参数。”。由于无法修改基,因此此方法将不适用于您,因为someMethod:
必须由基定义才能正确转发。我所知道的唯一剩下的“变通方法”是实现定义的。答案很好,不过我可能会以“你不能”开头;)