繁体   English   中英

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

[英]Difference between a property and a global variable [objective c]

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

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

谢谢!

编辑:

, thanks] 公共全局变量(我想?)[编辑:我现在了解到这是一个 ,谢谢]

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

属性

@property (nonatomic) CGFloat x;

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

它称为实例变量。

属性通常(但不一定)具有关联的实例变量,但是现代的编译器对您隐藏了该变量。

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

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

始终可以通过直接使用实例变量来绕过访问器。 如果是自动合成的iVar,则为_x

请注意,在两种情况下都不需要->

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

但是有了一个属性,就有其他的网守来保护对变量的访问:

  • 您可以将属性设置为只读。
  • 微调内存语义(复制,分配等)。
  • 通过使用KVO,很容易让更改自动传播。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM