IOS / Objective-C:从类方法中调用常规自我方法

时间:2017-11-25 20:48:49

标签: ios objective-c class

我有一个类方法,我按以下方式调用:

#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中实际上有很多方法可以按顺序调用,所以我宁愿不必将每个标记更改为+。

从类方法中调用方法时,您应该怎么做?或者有自己的替代方案吗?

提前感谢任何建议。

1 个答案:

答案 0 :(得分:3)

在实例方法中,self是对当前类的当前实例的引用。顾名思义,类方法在类本身上调用,而不是在实例上调用,因此self没有当前实例可以引用。在这种情况下,self指的是当前的类。

换句话说,在调用[self otherMethod]的类方法中,会调用另一个名为otherMethod的类方法(即使用+声明)。要调用实例方法,您需要一个对象的实例来处理,可以是传递给您的类方法的实例,也可以是由类方法本身实例化的实例,但是您仍然不会使用{{{}来引用该实例。 1}},您将使用参数或变量名称。

通常这应该不是问题。您需要考虑对象的语义以及方法是否都应该是类方法(即它们不需要对对象的特定实例进行操作),或者它们是否应该是使用类方法创建新实例的实例方法如果需要,或者您的类方法不应该是类方法。