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中不存在,无论它在运行时如何实现。 –