0

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

我已经读过将代码从使用全局变量更改为使用属性可能是一个程序重大更改。这是真的吗?如果是,为什么?

谢谢!

编辑:

块.h

公共全局变量(我认为?)[编辑:我现在明白这是一个实例变量,谢谢]

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

财产

@property (nonatomic) CGFloat x;
4

2 回答 2

3

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

它被称为实例变量。

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

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

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

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

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

于 2013-07-11T08:00:37.010 回答
1

甚至一个类属性也由一个类变量支持,即使它不是全局的。

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

  • 您可以将属性设为只读。
  • 微调内存语义(复制、分配等)。
  • 通过使用 KVO,很容易让更改自动传播。
于 2013-07-11T07:58:43.173 回答