【问题标题】:understanding self. in objective C了解自己。在目标 C
【发布时间】:2010-10-25 20:14:00
【问题描述】:

自从我用 Objective-C 编程已经 3 天了,我仍然不太了解 self 的概念。

我们什么时候应该使用 self.在实现代码中? 如果我正确理解了这一点,如果我将它定义为一个属性,那么我应该使用 self. 但接下来的问题是为什么?我一直在阅读许多关于手机编程的书籍,但似乎没有一本能给我一个有力而明确的答案。在java等其他编程语言中self和this一样吗?

【问题讨论】:

标签: objective-c


【解决方案1】:

Objective C 中的self 是指向当前消息接收者的指针,因此它与Java 中的this 概念非常相似。

【讨论】:

    【解决方案2】:

    self 大致相当于其他语言中的this。此外,Objective-C 2.0 中引入的点符号可以掩盖实际发生的情况。

    self.foo = 4;
    NSInteger someInt = self.foo;
    

    以上同

    [self setFoo:4];
    NSInteger someInt = [self foo];
    

    self 实际上只是一个自动传递给类和实例方法的变量。这就是使它成为可能的原因:

    self = [super init];
    if (!self) return nil;
    

    【讨论】:

    【解决方案3】:

    Objective-C 中的self 与Java 中的this 相同。

    在这两种情况下,selfthis 都是对象内部的特殊变量,它们引用对象本身。在访问同一对象的属性或调用方法时,或者在调用外部方法以将对象作为参数传递时使用它。

    如果您将selfthis 视为同一事物,则不会有任何问题。当然,您实际上不能互换使用它们,因为每种语言只能识别其中一种。

    【讨论】:

      【解决方案4】:

      如果您习惯使用 Java 编程,可以将 self 视为 Java 的 this
      例如,当您想引用与该类有关的某些内容时,您可以在该类中使用 self - 例如,在 Car 类中,self.wheels

      【讨论】:

        【解决方案5】:

        如果您定义了一个属性并使用 self.foo = bar 合成了它,将调用为您生成的 setter。如果你只是做 foo = bar 你分配给你的变量而不通过 setter 方法。这意味着如果属性是通过保留或同步声明的,您将不会利用保留。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-29
          • 1970-01-01
          • 2012-08-21
          • 1970-01-01
          • 1970-01-01
          • 2013-03-15
          • 2016-02-24
          相关资源
          最近更新 更多