属性和全局变量之间的差异[objective c]

时间:2013-07-11 07:41:40

标签: objective-c class

我想知道类的公共全局变量和类的属性之间的区别是什么(Objective-C主要是iOS编程)。我注意到的只有你必须使用指针表示法 - >访问类的全局变量而不是点。

我已经读过,将代码从使用全局变换为使用属性可能会破坏程序。这是真的,如果是的话,为什么?

谢谢!

编辑:

Block.h

Public Global Variable(我想?)[编辑:我现在明白这是实例变量,谢谢]

@interface Block : GameObject {
    @public
   int type;
   SKEmitterNode *particles;}

属性

@property (nonatomic) CGFloat x;

2 个答案:

答案 0 :(得分:2)

不,这不是“全局变量”。

它被称为实例变量。

属性通常(但不一定)具有关联的实例变量,但现代编译器会隐藏这些属性。

使用实例变量之间的最大区别在于,始终通过其访问器访问属性(在您的情况下为setX:(CGFLoat)x?和 - (CGFloat)x`。

如果您愿意,可以覆盖这些访问者,并在访问变量时进行特殊处理。

始终可以直接使用实例变量绕过访问器。在自动合成的iVar的情况下,这将是_x

请注意,在任何一种情况下都不需要->

答案 1 :(得分:1)

即使类属性也是类变量支持,即使它不是全局的。

但是对于一个属性,有一个额外的看门人守护变量:

  • 您可以只读取属性。
  • Finetune内存语义(复制,分配等)。
  • 通过使用KVO,可以轻松地让更改自动传播。