gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:45:28 25 4
gpt4 key购买 nike

我是 objective-c 的新手,我有一些疑问。我发现您可以访问 var->myProperty 之类的类的属性,也可以访问 variable.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