我有两个类,Vehicle
和 Car
; Car
是 Vehicle
的子类。
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>
那样的话,您将在编译器中收到警告,要求您实现该方法。并且在实现中可以调用super
的logDetails
实现:
-(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/