“self”是从实例方法调用同一实例的另一个方法的唯一方法吗?

时间:2011-07-05 07:43:00

标签: objective-c

我一直在阅读Apple的“Objective-C编程语言”,我注意到如果你说的话,

A / W类方法MA和MB,其中MA用“[self MB]”调用MB。

如果你继承A类,我们称之为SubClass A,并覆盖MB。制作一个SubClass A的实例并调用MA,它将使用新的MB。现在,如果你打电话给“[超级MA]”,它将仍然使用新的MB。

我说错了吗?

所以我想知道“自我”是否是“正确”的方式,在同一个实例中调用其他方法,或者它是否仅用于覆盖初始化器等特殊情况。

4 个答案:

答案 0 :(得分:3)

是的,self是将消息发送到正在执行该方法的同一实例的正确方法。

关于Objective-C等语言的对象模型,要记住的一件大事是,从概念上讲,你不是“调用方法” - 你是发送消息。你告诉对象要做什么,而不是怎么做。您通常不必考虑在发送消息时将执行哪种精确方法 - 该对象应该适当地响应。因此,如果某人已经覆盖了这种“MB”方法,那么新行为可能就是他希望对象在获得“MB”消息时如何响应。如果某人已经覆盖了“MB”,使得它不再像旧方法那样可用,那么这听起来像是一个bug。

答案 1 :(得分:1)

是的。 如果要调用同一类中的方法,在类中使用self是正确的方法。 'self'表示您正在使用它的类的当前实例。

答案 2 :(得分:0)

self是正确的方法。 Objective-C中的每个方法都可以被认为是“虚拟的”(用C ++的说法)。

答案 3 :(得分:0)

在SubClass A中,你不需要创建一个实例,你可以通过sing self访问subClass A的任何函数。 使新对象创建一个新实例,因此它会重新实现该实例的所有属性。 所以你不能对此做任何事情。

self always be right for accessing same class methods and property.

希望现在你能理解为什么要自我而不是制造其他新的实例。

并且[超级MA]必须调用A类MA方法,不需要MB调用MA的情况。

我测试了它,没有bug在目标c中跟随所有OOP概念你可以通过调用super关键字上的方法来调用超类方法。

所以可能你做错了什么。检查一下。