冗余编译器警告

时间:2009-12-12 04:05:42

标签: objective-c compiler-warnings

我经常发现,当从myObject2调用与myObject1相关联的myMethod时,我收到“myObject1可能无法响应-myMethod”的警告,但是程序运行起来就好了。为什么编译器在编译时不识别声明的方法?

John Doner

5 个答案:

答案 0 :(得分:2)

这显示为警告,因为Objective-C是一种非常动态的语言。在编译时,编译器在尝试编译文件时没有找到“myMethod”的声明(可能是你错过了一个头文件,或者忘了将它包含在头文件中?)。但是,它只生成一个警告,因为Objective-C能够在运行时创建和加载额外的方法,以便在代码执行时,该方法将存在。因此,这只是一个警告。

很可能您只是没有在相应的头文件中声明该方法。

答案 1 :(得分:1)

警告意味着您正在调用编译器尚未看到方法声明的方法。在大多数其他语言中这是一个错误,它肯定是一个你不能忽视的警告。

如果您尚未声明方法,请在源文件顶部的@interface块(如果它是私有方法)或类的头文件(如果它是公共方法)中执行此操作。

如果您已在头文件中声明了该方法,请务必导入头文件。

如果您已经声明了该方法并且导入了正确的头文件,那么您的某个地方就会出现错字。

答案 2 :(得分:0)

或者有时,如果您使用委托类,则需要使用这些委托方法定义类别,以便编译器找到它们。

答案 3 :(得分:0)

经常发生这种情况的一种情况是,如果包含该对象的变量的类型是超类的类型,并且该方法仅为子类定义。您可以通过将其键入id或使静态类型更具体来避免这种情况。如果变量类型是类本身的变量类型,那么在您尝试调用它的范围内编译器可能看不到该方法 - 其他答案处理这种情况。

答案 4 :(得分:-2)

通常,添加

@class myObject1

将解决问题。在Stack Overflow上查看Ben Gottlieb对Objective-C @class vs. #import的回答。