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

问题描述 投票:2回答:1

我刚发现我们的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 xcode llvm-clang clang-static-analyzer
1个回答
1
投票

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

- (void)__mylib_hideView {}
© www.soinside.com 2019 - 2024. All rights reserved.