3
鐺報告,Test1(FooBar)
不實現foo
或bar
,實現它儘管在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
類別在運行時有效地摺疊到類中;在類別和類之間沒有區別,實際上(事實上,在運行時沒有辦法通過名稱來識別類別 - 您可以做的最多的是通過方法列表進行grub,以注意來自類別的方法通常存儲在與主類的方法不同的鏈表)。在編譯期間,類仍然有意義,因此,我希望這意味着'Test1(FooBar)'的實現必須實現''的合約來保持編譯器的安靜。 –
bbum
@bbum感謝您的解釋。我覺得編譯器應該更聰明一些,並提出一個雷達。如果你將這個評論改爲答案,我會將你的答案標記爲答案。 –
看起來你試圖實現的是類之間的繼承,作爲一個概念在objective-c中不存在,無論它在運行時如何實現。 –