在同一文件中调用返回类型为“void”的方法

时间:2011-04-10 23:22:27

标签: iphone objective-c xcode

我有一个简单的问题。

在Objective-C中,当你有一个想要调用的方法时,返回类型为void,你如何从另一种方法中调用它?

我在我的应用程序中这样做的方式是:

[self nameOfMethod];

但是这导致Xcode吐出以下错误:

Method '-nameOfMethod' not found (return type defaults to 'id')

虽然它似乎仍在执行中。

我称之为正确,还是有更好的方式?

谢谢!

3 个答案:

答案 0 :(得分:6)

我猜你没有在类接口中声明-nameOfMethod,而是从另一个方法调用它,它的实现先于-nameOfMethod的实现,即:

- (void)someMethod {
    [self nameOfMethod];
}

- (void)nameOfMethod {
    // …
}

当编译器正在解析-someMethod且未在类接口中声明-nameOfMethod时,它会生成警告,因为它还不知道-nameOfMethod

基本上有两种解决方案。您可以重新排序实施文件,以便在-nameOfMethod之前显示-someMethod,但这并非总是可行。更好的解决方案是在类接口中声明-nameOfMethod。如果您的类的客户端应该调用-nameOfMethod,请将其放在相应的头文件中。另一方面,如果-nameOfMethod仅应在实现文件中调用,请使用类扩展。假设您的类名为SomeClass,这就是您的标头和实现文件的样子:

// SomeClass.h
@interface SomeClass : NSObject {
    // … instance variables
}

// … external methods
- (void)someMethod;
@end

// SomeClass.m
#import "SomeClass.h"

@interface SomeClass () // this is a class extension
// … internal methods
- (void)nameOfMethod;
@end

@implementation SomeClass
- (void)someMethod {
    [self nameOfMethod];
}

- (void)nameOfMethod {
    // …
}
@end

使用类扩展,方法实现的顺序无关紧要。

答案 1 :(得分:1)

您需要确保您的接口文件包含nameOfMethod的定义 - so;

-(void) nameOfMethod;

答案 2 :(得分:1)

您正确调用它,但请确保您的(void)方法的接口位于.h文件中。