我在ClassName.m中编写了一个实例方法:
-(void)methodName:(paraType)parameter
{...}
并使用
[self methodName:parameter];
调用它会弹出一个警告,但代码仍会成功运行。
这是因为我还没有创建类的实例吗?为什么方法仍能正常运行?调用自我方法来阻止警告的正确方法是什么?
答案 0 :(得分:5)
接收警告帮助的第一步是发布警告:)
我假设这是一个无法识别的消息?如果是这样的话,因为虽然编译器看到了对“methodName”的调用,但它不知道它是否对该对象有效。
我猜你的代码看起来像;
-(void) someFunc
{
...
[self methodName:parameter];
...
}
-(void)methodName:(paraType)parameter
{
...
}
你可以;
a)将'methodName'函数放在文件的前面,以便编译器在调用它之前看到它。
b)在类接口中声明它。 E.g。
// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end
答案 1 :(得分:1)
你得到的警告是什么?
您是否在头文件中定义了该方法?
您使用的语法是在self上调用方法的propper方法。
答案 2 :(得分:1)
该方法将起作用,因为Objective-C方法在运行时得到解决。我希望你得到的警告是“Object Foo可能不响应-methodName:”然后它告诉你它将返回类型默认为id
。那是因为编译器在编译它所调用的代码时没有看到-methodName:
的声明或定义。要删除警告,请在类的接口或类的类别中声明方法。
答案 3 :(得分:1)
如果您收到警告,可能是因为方法签名不在界面中。
@interface foo ....
-(void)method;
编写实现后,警告应该消失,因为它不是编译器第一次看到该方法。它可以不用这样做,但警告信息很烦人。