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

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

使用

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

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

有帮助吗?

解决方案

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

我假设这是一个无法识别的消息?如果是这样的话,那是因为虽然编译器看到了对“methodName”的调用。它不知道这是否对该对象有效。

我猜你的代码看起来像;

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

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

你可以;

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

b)在类接口中声明它。 E.g。

// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end

其他提示

你得到的警告是什么?

您是否在头文件中定义了该方法?

您使用的语法是在self上调用方法的propper方法。

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

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

@interface foo ....

-(void)method;

编写实现后,警告应该消失,因为它不是编译器第一次看到该方法。它可以不用这样做,但警告信息很烦人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top