【问题标题】:Is "self" necessary?“自我”是必要的吗?
【发布时间】:2010-05-07 13:32:55
【问题描述】:

在 Objective-C 中是否有必要使用“self”,或者可能只是一个好习惯?我已经从一直使用它变成了根本不使用它,我似乎并没有真正注意到任何区别。不就是隐含的吗?

【问题讨论】:

  • 你的意思是从'self.property = value'变成'property = value'吗?

标签: objective-c iphone


【解决方案1】:

self 是必需的,如果您希望一个对象发送消息到它self。通过 getter/setter 访问属性有时也很有用,在这种情况下,您还需要使用self,如self.propertynameself.propertyname = value。 (这些不等同于propertynamepropertyname = value

【讨论】:

  • 如果我使用消息符号而不是点符号怎么办?有关系吗?
  • 真的很清楚的答案,因为在网络上的许多教程都说是一样的东西,谢谢你的回答
【解决方案2】:

引用实例变量时没有必要。当您想将当前对象的引用传递给另一个方法时,例如设置委托时,这是必要的:

[someObj setDelegate:self];

在当前对象上调用同一个类中的方法时也是必须的:

[self doMethod]

【讨论】:

  • 赋值给实例变量时,如果依赖setter进行复制或保留,则需要使用self。
【解决方案3】:

对于处理变量,这取决于。如果您想使用合成的 getter 或 setter,请在 self 中使用点符号。

self.someProperty = @"blah"; //Uses the setter
someProperty = @"blah"; //Directly sets the variable

【讨论】:

  • 请注意,您不必使用点符号。但我们很多人都喜欢它。不过我要提醒你:点符号几乎看起来像是从非指针结构访问字段,而不是向对象发送消息。因为 Objective-C 对象是指向结构的指针,self.someiVar = @"this" 不能访问实例变量;您将使用self->someiVar = @"this"(在类的实现中不需要self-> 位)。因此,如果您了解自己在做什么和不做什么,请使用点符号。
【解决方案4】:

实际上并不是每次都需要,但这是一个很好的做法,因为它可以让其他人更容易阅读您的代码。

当你在不同的类中有同名的对象时,“self”键会告诉你的软件你正在引用同一个类中的对象。

这通常发生在较大的项目中。

【讨论】:

    【解决方案5】:

    是的,因为 Objective C 没有像 C/C++ 这样的方法调用,而是使用消息发送,self for 在这样的上下文中

    [自己做某事];和 self.myProperty;

    是必要的。

    如果您正在访问 ivar,则不需要 self。

    希望对您有所帮助。

    -简历

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多