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

标签 objective-c class variables object properties

我是 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/

相关文章:

c++ - C++ 中的继承 : define variables in parent-child classes

iphone - 如何在UIWebview中心加载pdf文件

使用 pthread 时,使用全局变量的 C++ 显示比指针慢 100%?

ios方法参数分配全局变量

c++ - 类析构函数导致重载+运算符的问题

java - 在Java中将对象添加到空数组中

php - PHP 可以将类名中的对象实例化为字符串吗?

javascript - 如何缩短这段代码?

iOS 7 - 在 ViewController 之间传递数据(图像)

objective-c - 合成的ivars存储在哪里?