2013-07-11 40 views
0

我想知道类的公共全局变量和类的属性之间的区别是什么(Objective-C主要是iOS编程)。我只注意到,你必须使用指针符号 - >来访问一个类的全局变量而不是一个点。属性和全局变量之间的区别[objective-c]

我读过使用全局变化来使用属性的代码可以是一个程序突破性变化。这是真的吗?如果是这样,为什么?

谢谢!

编辑:

Block.h

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

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

物业

@property (nonatomic) CGFloat x; 
+2

类没有全局变量 – peko

+0

这是实例变量。请参阅[属性与实例变量](http://stackoverflow.com/questions/719788/property-vs-instance-variable)以及其他许多... –

回答

2

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

它被称为实例变量。

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

使用实例变量之间最大的区别是,一个属性是通过它的存取总是访问(在你的情况setX:(CGFLoat)x?和 - (CGFloat的)x`

如果你愿意,你可以覆盖这些访问和做特殊处理,比如,每当变量被访问。

总是可以通过直接使用实例变量绕过存取。在自动合成伊娃的情况下,这将是_x

请注意,->不是必需的ary在任何情况下都是

+1

属性不一定需要由实例变量进行备份。 –

+0

绝对正确的马丁,你是对的我需要编辑它。甚至一个读写属性也不一定由iVar备份。我的头脑在哪里...... – below

+0

“请注意,在这两种情况下 - >都不是必需的”,除非1)您正在访问除self之外的对象,或者2)具有隐藏实例变量的具有相同名称的局部变量 – newacct

1

即使一个类属性是由一个即使它不是全局变量,也是类变量。

但与属性一个具有额外的看门人守着访问变量:

  • 您可以进行属性只读。
  • Finetune内存语义(复制,分配等)。
  • 通过使用KVO,很容易让更改自动传播。
+1

属性不一定是由实例变量备份的。 –

相关问题