我有个简单的问题。
在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
使用类扩展,方法实现的顺序并不重要。