1
我才发现这是由一个偶然的方法重写引发了我们的iOS应用程序中的错误。的Objective-C:编译器警告意外方法覆盖
在这种情况下,子类中的属性将覆盖在父类“私人”的方法。
@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
方法。
我的问题是如何避免这些问题?有没有编译器警告?
编译器在隐藏时无法知道“hideView”的存在。隐藏方法的唯一参考是编译器无法访问的目标文件(frameworks/libs)。 – clemens
我明白了,为什么这是不可能的。静态分析器可能是这样的。由于类型不匹配,这绝对是一个错误的情况。我想我要提交一个雷达 – cornr
静态分析器也是基于编译器。它也无法访问目标文件。 – clemens