Ide*_*per 4 inheritance overriding objective-c compiler-warnings
我有两个班,Vehicle和Car; Car是.的子类Vehicle.
有一种方法logVehicleDetail在Vehicle类.
有什么办法可以在重写这个方法时强制Car调用它的超类logVehicleDetail方法吗?如果子类不这样做,那么编译器应该生成警告或错误.
例如,在没有ARC的情况下进行编译时,编译器会[super dealloc]在您自己调用时发出警告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
Run Code Online (Sandbox Code Playgroud)
实现类似结果的另一种方法是为记录细节的车辆创建协议,例如
@protocol VehicleLogger <NSObject>
-(void)logDetails;
@end
Run Code Online (Sandbox Code Playgroud)
在您的Vehicle头文件中.然后,在Vehicle要记录详细信息的每个子类中,使其符合该协议.
@implementation Car <VehicleLogger>
Run Code Online (Sandbox Code Playgroud)
这样,您将在编译器中收到警告以实现该方法.在实现中,您可以调用以下super的实现logDetails:
-(void)logDetails {
[super logDetails];
//Do more stuff here, if I want
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果你想要的是每个子类调用Vehicle的实现,那么就不要在子类中实现该方法.