为什么我不能在目标c中使用classname而不是self

时间:2014-03-31 15:28:30

标签: objective-c oop class-method

这对我来说不合逻辑。当然,通过self-keyword调用类中的方法很有用。但为什么不可能通过自己的类名调用它?

e.g。 [MyClassWhereIAmActuallyIn anyRandomMethod];代替[self anyRandomMethod];

3 个答案:

答案 0 :(得分:2)

因为它有不同的含义。

[self someMethod]

someMethod发送给该对象,该对象的引用存储在(略微神奇的)变量self中。

[SomeClass someMethod]

someMethod发送给类对象(是的,类也是对象),其中包含类SomeClass的元信息。

两个不同的对象("接收器")。另请注意,Objective-C中有类方法(即,您可以利用这一事实,即类是对象,并为它们定义新方法)。观察:

@interface SomeClass
    - (void) someMethod;
    + (void) someMethod;
@end

这些是完全不同的方法,适用于完全不同的接收器。标有-的方法是一种实例方法(将使用,例如,使用self)。标有+的方法是一个类方法(并将与类对象一起使用)。

答案 1 :(得分:1)

您可以像这样调用类方法(' +')。 Self是实例方法中指向类实例的指针(' - '),当你在类方法中时,self指向单例类对象(' +')

答案 2 :(得分:0)

在OOP中,这是类对象和该类对象的实例之间的区别。创建方法时,指定它是类方法(+)还是实例方法(-)。定义方法后,您需要以适当的方式调用它(在类对象或该类的实例上)。