警告「[超]可能不[選擇]迴應」我有一個的NSView子類下面的代碼:避免,而不會產生LLVM的「不能投「超級」錯誤
- (id)forwardingTargetForSelector:(SEL)aSelector
{
if ([super respondsToSelector:@selector(forwardingTargetForSelector:)]) {
// cast to (id) to avoid "may not respond to selector" warning
return [(id)super forwardingTargetForSelector:aSelector];
} else {
[self doesNotRecognizeSelector:aSelector];
return nil;
}
}
在第一行, return [(id)super ...
將super
轉換爲id
,因爲在GCC編譯器下,這抑制了超類(NSView)可能不響應forwardingTargetForSelector:
的警告,如answers such as this one中所建議的那樣。
但是,當我切換到LLVM編譯器時,這會導致「Can not cast super」錯誤。有沒有正確的方法來修改我的代碼,以便LLVM和GCC都不會發出警告或錯誤?
真的,gcc在投射超級到id時應該會引發錯誤。 super是一個包含對象和超類指針的結構,因此將它用作id會導致崩潰。 – ughoavgfhw 2010-12-17 21:48:31