2012-06-13 73 views
3

鐺報告,Test1(FooBar)不實現foobar,實現它儘管在FOO和Test1(Foo)bar正在實施中Test1正在實施。由於Test1(Foo)@interface存在於Test1(FooBar)之上,所以叮噹應該看到Test1(Foo)實施了foo並且不應該要求我在Test1(FooBar)中實現它。由於Test1 implements bar,clang不應該要求我在Test1(FooBar)中實現它。聲明符合目標c協議與一個類別,並與另一類別

@interface Test1 : NSObject 

- (void) bar; 

@end 

@interface Test1(Foo) 

- (void) foo; 

@end 

@protocol FooBar <NSObject> 

- (void) foo; 
- (void) bar; 

@end 

@interface Test1(FooBar)<FooBar> 

@end 

@implementation Test1(Foo) 

- (void) foo { 
} 

@end 

@implementation Test1(FooBar) 

@end 

回答

1

我的理解是,這條線:

@interface Test1(FooBar)<FooBar> 

可以用簡單的英語解釋爲 「 FooBar的階級的Test1應該實現協議FooBar的」。換句話說,協議適用於類別,而不是類別。

+1

類別在運行時有效地摺疊到類中;在類別和類之間沒有區別,實際上(事實上,在運行時沒有辦法通過名稱來識別類別 - 您可以做的最多的是通過方法列表進行grub,以注意來自類別的方法通常存儲在與主類的方法不同的鏈表)。在編譯期間,類仍然有意義,因此,我希望這意味着'Test1(FooBar)'的實現必須實現''的合約來保持編譯器的安靜。 – bbum

+0

@bbum感謝您的解釋。我覺得編譯器應該更聰明一些,並提出一個雷達。如果你將這個評論改爲答案,我會將你的答案標記爲答案。 –

+0

看起來你試圖實現的是類之間的繼承,作爲一個概念在objective-c中不存在,無論它在運行時如何實現。 –

相關問題