Objective-C:编译器警告意外方法覆盖

Objective-C: Compiler warning for accidental method override

我刚刚在我们的 iOS 应用程序中发现了一个由意外方法覆盖触发的错误。

在这种情况下,子类中的 属性 覆盖超类中的 "private" 方法。

@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

如果在doSomething方法中调用了[self hideView],则不会调用hideView方法。相反,只要求 属性 提供其值。我明白为什么会这样,但这是一个容易出错的情况,因为子类不知道 hideView 方法。

我的问题是如何预防这些问题?是否有编译器警告?

您无法完全避免这些问题,这是 Objective C 中的预期行为。但是,如果您想保护您的私有方法不被意外覆盖,您可以在它们的名称前加上您的库的标识符(或您喜欢的任何其他字符串),例如:

- (void)__mylib_hideView {}