【问题标题】:Overriding class methods in ObjectiveC在 Objective C 中重写类方法
【发布时间】:2014-12-31 23:30:30
【问题描述】:

考虑以下情况:

@interface Superclass : NSObject
...
@end

@interface Superclass

+ (void)methodToOverride
{
    NSLog(@"This method should be overridden by subclass!");
}

+ (void)callMethodToOverride
{
    [self methodToOverride];
}

@end

@interface SubClass : SuperClass
...
@end

@implementation SubClass

+ (void)methodToOverride
{
    NSLog(@"I'm overriding this method!");
}

@end

现在,打电话时

[Subclass callMethodToOverride];

我收到"This method should be overridden by subclass!"。是否有可能得到I'm overriding this method! 或者这不能使用ObjC 的静态方法?

干杯!

【问题讨论】:

  • Objective-C 中没有静态方法这种东西。您问题中的方法是类方法(与实例方法相反)。

标签: ios objective-c


【解决方案1】:

我不时使用这种范式,它对我有用。在我的实现中,我引用[self class] 而不是self。也许这就是你缺少的关键。

+ (void)callMethodToOverride
{
  [[self class] methodToOverride];
  NSLog(@"This is the class that I just used: %@", NSStringFromClass(self));
}

听起来这可能只是一个错字,你没有使用你认为的类。

【讨论】:

  • 在类方法中,self 是类,所以self[self class] 是等价的。
  • 我不反对;它不应该有所作为。我正在分享我所使用的代码的真实情况。
  • 谢谢,成功了!我有点调用 [Superclass methodToOverride] 而不是 [self methodToOverride]!问题解决了:)
猜你喜欢
  • 2010-12-11
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多