我刚发现我们的iOS应用程序中有一个由意外方法覆盖触发的错误。
在这种情况下,子类中的属性会覆盖超类中的“私有”方法。
@interface MyClass : NSObject
- (void)doSomething;
@end
@implementation MyClass
- (void)doSomething {
[self hideView];
}
- (void)hideView {
}
@end
@interface MySubclass : MyClass
@property (NS_NONATOMIC_IOSONLY) IBInspectable BOOL hideView;
@end
@implementation MySubclass
@end
如果在[self hideView]
方法中调用doSomething
,则不调用hideView
方法。相反,只要求财产的价值。我理解为什么会发生这种情况,但这是一个容易出错的情况,因为子类不知道hideView
方法。
我的问题是如何预防这些问题?有编译器警告吗?
您无法完全阻止这些问题,这是Objective C中的预期行为。但是,如果您想保护您的私有方法免遭意外覆盖,您可以在其名称前加上您的库的标识符(或您喜欢的任何其他字符串) ), 例如:
- (void)__mylib_hideView {}