在Objective-C中强制子类调用其超类方法

开发者

我有两节课,VehicleCarCar是的子类Vehicle

有一种方法logVehicleDetailVehicle类。

覆盖此方法时,有什么方法可以强制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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章