objective-c - 强制子类在 Objective-C 中调用其父类(super class)方法

标签 objective-c inheritance compiler-warnings overriding

我有两个类,VehicleCarCarVehicle 的子类。

Vehicle 类中有一个方法logVehicleDetail

有什么方法可以强制 Car 在覆盖此方法时调用其父类(super class)方法 logVehicleDetail ?如果子类没有这样做,那么编译器应该生成警告或错误。

例如,在没有 ARC 的情况下进行编译时,如果您不在自己的 dealloc 中调用 [super dealloc],编译器会发出警告。

最佳答案

有多种方法可以做到这一点。也许最简单和最直接的方法是将 __attribute__((objc_requires_super)) 添加到您的方法声明中:

@interface Vehicle : NSObject
  -(void)logDetails __attribute__((objc_requires_super));
@end

@implementation Car
  -(void) logDetails {
} // WARNING: Method possibly missing a [super logDetails] call

实现类似结果的另一种方法是为记录详细信息的车辆创建协议(protocol),例如

@protocol VehicleLogger <NSObject>

-(void)logDetails;

@end

在您的 Vehicle 头文件中。然后,在要记录详细信息的 Vehicle 的每个子类中,使其符合该协议(protocol)。

@implementation Car <VehicleLogger>

那样的话,您将在编译器中收到警告,要求您实现该方法。并且在实现中可以调用superlogDetails实现:

-(void)logDetails {
   [super logDetails];
   //Do more stuff here, if I want
}

另一方面,如果您只想让每个子类都调用Vehicle 的实现,那么就不要在子类中实现该方法。

关于objective-c - 强制子类在 Objective-C 中调用其父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27312738/

相关文章:

iphone - 如何为数组中的每个 UIButton 设置一个方法

objective-c - 是否保留代表?

Java子类无法实现父类的抽象方法

python - 在类之间传递 tkinter Canvas ,而不从父级内部调用子级

iphone - Objective-C,协议(protocol)和子类

ios - 在 UITableView 中验证 n 个 UITextfields

ios - PFUsers 共享所有相同的 PFObjects?

Python继承返回属性错误

c++ - VS2015 : using/Wall from the CLI but disabling warning in some file (eg: thoses in Microsoft Visual Studio 14. 0)

c - 除了 -Wall 和 -Wextra 之外,还有哪些其他工具可以用来发现尽可能多的错误或警告?