如何在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:
必须由基定义才能正确转发。我所知道的唯一剩下的“变通方法”是实现定义的。答案很好,不过我可能会以“你不能”开头;)