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