我有两节课,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
实现类似结果的另一种方法是为记录详细信息的车辆创建协议
@protocol VehicleLogger <NSObject>
-(void)logDetails;
@end
在您的Vehicle
头文件中。然后,在Vehicle
要记录详细信息的每个子类中,使其符合该协议。
@implementation Car <VehicleLogger>
这样,您将在编译器中收到警告以实现该方法。在实现中,您可以调用super
的实现logDetails
:
-(void)logDetails {
[super logDetails];
//Do more stuff here, if I want
}
另一方面,如果您只想让每个子类都调用Vehicle
的实现,那么就不要在子类中实现该方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句