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