【问题标题】:How to override a variadic method in Objective-C如何在 Objective-C 中覆盖可变参数方法
【发布时间】:2023-03-22 19:40:01
【问题描述】:

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

- (void)someMethod:(id)arguments, ... ;

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

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

    // override implementation
    ...
}

但这不起作用。有人知道如何工作吗?谢谢。

【问题讨论】:

标签: objective-c variadic variadic-functions


【解决方案1】:

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

- (void)someMethod:(id)arguments, ... ;

子类将实现:

- (void)vsomeMethod:(id)arguments vaList:(va_list)vaList;

那么基础将在其someMethod:vaList: 的实现中调用vsomeMethod:vaList:

【讨论】:

  • 谢谢,但在我的情况下,不能修改基类。
  • @TaketoSano 就像实现一个可变参数函数一样,但是您将在创建它之后将va_list 转发给vsomeMethod:vaList:,而不是枚举参数。由于您无法修改基础,因此此方法对您不起作用,因为someMethod: 必须由基础定义才能正确转发。我所知道的唯一剩下的“解决方法”是实现定义的。
  • 很好的答案,尽管我可能会以“你不能”作为开头。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2014-08-03
  • 1970-01-01
相关资源
最近更新 更多