gpt4 book ai didi

objective-c - var->myProperty 和 var.myProperty 之间的区别

转载 作者:行者123 更新时间:2023-12-02 04:47:03 25 4
gpt4 key购买 nike

我是 objective c 的新手,我有一些疑问。我已经看到您可以访问类的属性,例如 var->myPropertyvariable.myProperty,但我不知道它们之间有什么区别2. 在网上查了很多,确实没有找到确切的答案。

抱歉,如果我有拼写错误,请提前致谢。

最佳答案

需要考虑三种情况:

  • 使用someObject.something

  • 使用self->something

  • 使用otherObject->something

someObject.something点语法。就行为而言,它完全等同于 [someObject something]。这是一个方法调用。请注意,something 不必通过 @property 声明。也就是说,someArray.countsomeString.length 在语法上都是有效的。

self->something 正在直接访问一个 ivar。这是一种很少使用的语法;罕见是几乎从不。相反,只需使用 something =[something doSomething] 直接访问 ivar。不需要 ->

otherObject->something 直接在 otherObject 的实例变量周围进行搜索。糟糕的程序员。没有 donut 。不要那样做。它破坏了封装并导致代码极其脆弱、难以维护。


关于 @property 声明的注释。如果你有:

 @property (atomic, strong, readonly) SomeClass *foo;

如果你让编译器自动@synthesize一切,它会创建一个名为_foo的实例变量。

您应该在 initdealloc 方法中使用直接访问,但是——通常,但不总是——在其他地方使用 setter/getter。 IE。在你的 init 你会做 _foo = [SomeClass someClassWithSomeMagicValue:42] (假设 ARC,所以不需要 retain)。在其他任何地方,您都可以执行 [[self foo] castMagic];

关于objective-c - var->myProperty 和 var.myProperty 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19607161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com