我有一个类方法,我按以下方式调用:
#import myClass.h;
[MYClass classMethod];
In myClass, I have a method as follows:
+(void)classMethod {
NSLog(@"classMethod called");
[self otherMethod];
}
-(void) otherMethod {
NSLog(@"other method called");
}
然而,这会抛出一个未知的选择器错误。
我的理解是自我意味着除了类方法中的文件之外的东西,即类本身,我可以通过将-otherMethod更改为+ otherMethod来消除该错误。但是,NSObject中实际上有很多方法可以按顺序调用,所以我宁愿不必将每个标记更改为+。
从类方法中调用方法时,您应该怎么做?或者有自己的替代方案吗?
提前感谢任何建议。
答案 0 :(得分:3)
在实例方法中,self
是对当前类的当前实例的引用。顾名思义,类方法在类本身上调用,而不是在实例上调用,因此self
没有当前实例可以引用。在这种情况下,self
指的是当前的类。
换句话说,在调用[self otherMethod]
的类方法中,会调用另一个名为otherMethod
的类方法(即使用+声明)。要调用实例方法,您需要一个对象的实例来处理,可以是传递给您的类方法的实例,也可以是由类方法本身实例化的实例,但是您仍然不会使用{{{}来引用该实例。 1}},您将使用参数或变量名称。
通常这应该不是问题。您需要考虑对象的语义以及方法是否都应该是类方法(即它们不需要对对象的特定实例进行操作),或者它们是否应该是使用类方法创建新实例的实例方法如果需要,或者您的类方法不应该是类方法。