这对我来说不合逻辑。当然,通过self-keyword调用类中的方法很有用。但为什么不可能通过自己的类名调用它?
e.g。
[MyClassWhereIAmActuallyIn anyRandomMethod];
代替[self anyRandomMethod];
答案 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中,这是类对象和该类对象的实例之间的区别。创建方法时,指定它是类方法(+
)还是实例方法(-
)。定义方法后,您需要以适当的方式调用它(在类对象或该类的实例上)。