-2

我在 ClassName.m 中编写了一个实例方法:

-(void)methodName:(paraType)parameter
{...}

并使用它调用它

[self methodName:parameter]; 
会弹出一个警告,但代码仍然可以成功运行。

这是因为我还没有创建类的实例吗?为什么该方法仍然正常运行?调用 self 方法来防止警告的正确方法是什么?

4

4 回答 4

5

那么接收警告帮助的第一步是发布警告:)

我假设这是关于无法识别的消息?如果是这样,那是因为尽管编译器看到了对“methodName”的调用,但它不知道这对对象是否有效。

我猜你的代码看起来像;

-(void) someFunc
{
  ...
  [self methodName:parameter]; 
  ...
}

-(void)methodName:(paraType)parameter
{
...
}

你可以;

a) 将“methodName”函数放在文件的前面,以便编译器在调用之前看到它。

b) 在类接口中声明它。例如

// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end
于 2009-03-03T07:54:21.400 回答
1

您收到的警告是什么?

你的头文件中有方法的定义吗?

您使用的语法是对 self 调用方法的正确方式。

于 2009-03-03T07:50:45.403 回答
1

该方法将起作用,因为 Objective-C 方法是在运行时解析的。我希望您收到的警告类似于“Object Foo 可能无法响应 -methodName:”,然后它会告诉您它默认返回类型为id. -methodName:那是因为编译器在编译您调用它的代码时还没有看到声明或定义。要删除警告,请在类的接口或类的类别中声明该方法。

于 2009-03-03T07:54:23.040 回答
1

如果您收到警告,可能是因为方法签名不在接口中。

@interface foo ....

-(void)method;

一旦编写了实现,警告就会消失,因为这不是编译器第一次看到该方法。不这样做也可以工作,但警告信息很烦人。

于 2011-03-29T05:03:58.090 回答