为什么指定协议但不实现所需的方法不是编译器错误?

时间:2011-06-21 21:15:06

标签: objective-c

在objective-c中,我可以做类似

的事情
@interface MyViewController : UIViewController <UITextInputDelegate>

为实现UITextInputDelegate协议的类MyViewController创建规范。现在,这个协议有几个必需的方法,所以我认为编译器根本不会让代码编译,除非这些方法确实在.m文件中实现了。无论如何,这编译。编译器确实spout 警告,所以很明显它检测到我没有实现所需的方法,但是我想知道为什么允许这个在语言方面完全编译是有意义的设计师。

3 个答案:

答案 0 :(得分:9)

无法编译代码时出现编译错误。不实现方法不会阻止编译代码,因为objective-c是动态语言。这意味着这些方法没有直接链接,因此在编译时不需要知道它们的位置。警告意味着有些东西可能在运行时导致错误,但代码已成功编译。

答案 1 :(得分:2)

正如ughoavgfhw指出的那样,这不是错误,因为语言的动态特性允许在运行时添加这些方法。仅仅因为在编译时找不到该方法并不意味着它不会在运行时出现。

答案 2 :(得分:2)

如果您想将此警告变成错误,则只需在-Werror=protocol的{​​{1}}中添加Other Warning Flags