我有个简单的问题。
在objective-c中,当您有一个返回类型为void的要调用的方法时,如何从另一个方法调用它?
我在申请表中的做法是:

[self nameOfMethod];

但这会导致xcode弹出以下错误:
Method '-nameOfMethod' not found (return type defaults to 'id')

尽管它似乎还在执行。
我说得对吗,还是有更好的办法?
谢谢!

最佳答案

我猜您还没有在类接口中声明-nameOfMethod,并且您从另一种方法调用它,它的实现在实现-nameOfMethod之前,即:

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

- (void)nameOfMethod {
    // …
}

当编译器解析-someMethod和未在类接口中声明时,它会生成警告,因为它还不知道-nameOfMethod。
基本上有两种解决办法。您可以重新排序实现文件,以便在cc之前出现-nameOfMethod,但这并不总是可能的。更好的解决方案是在类接口中声明-nameOfMethod。如果类的客户机应该调用-someMethod,请将其放在相应的头文件中。另一方面,如果仅在您的实现文件中调用-nameOfMethod,请使用类扩展。假设您的类被命名为“cc>”,这就是您的头文件和实现文件的样子:
// 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

使用类扩展,方法实现的顺序并不重要。

10-01 20:49