如何覆盖Objective-C中的可变方法

Tak*_*ano 5 objective-c variadic variadic-functions

我正在尝试扩展一个具有可变方法的类,例如:

- (void)someMethod:(id)arguments, ... ;
Run Code Online (Sandbox Code Playgroud)

并在子类中通过调用原始方法覆盖它,如:

- (void)someMethod:(id)arguments, ... {
    [super someMethod:arguments, ...];

    // override implementation
    ...
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.有谁知道如何工作?谢谢.

jus*_*tin 3

类似于printf/ vprintf,基会声明:

- (void)someMethod:(id)arguments, ... ;
Run Code Online (Sandbox Code Playgroud)

子类将实现:

- (void)vsomeMethod:(id)arguments vaList:(va_list)vaList;
Run Code Online (Sandbox Code Playgroud)

那么基地就会调用vsomeMethod:vaList:它的实现someMethod:vaList:

  • @TaketoSano,这就像实现一个可变参数函数,但是您可以在创建后将“va_list”转发到“vsomeMethod:vaList:”,而不是枚举参数。由于您无法修改基础,因此这种方法对您不起作用,因为“someMethod:”必须由基础定义才能正确转发。据我所知,唯一剩下的“解决方法”是实现定义的。 (2认同)