为什么对实例变量使用下划线,而不是相应的属性?

时间:2010-03-03 13:16:10

标签: iphone objective-c cocoa cocoa-touch

  

可能重复:
  How does an underscore in front of a variable in a cocoa objective-c class work?

我是iphone开发的新手。我正在研究iphone中的录音。我已经从Apple下载了“speak here”示例程序。它包含LevelMeter.h文件,其中

 @interface LevelMeter : UIView {

CGFloat                     _level, _peakLevel;

   }

该属性设置为

 @property                      CGFloat level;
 @property                      CGFloat peakLevel;

声明像_level这样的变量并将其属性设置为level是什么用。请解释一下。谢谢。

2 个答案:

答案 0 :(得分:1)

提醒

@property指令相当于声明一个setter和一个getter。如果是level

@property CGFloat level;

可以替换为

- (CGFloat)level;
- (void)setLevel:(CGFloat)v;

您的问题

为什么要为名为level的变量声明一个名为_level的属性,为什么要首先命名一个带有前导_的变量?我不知道。

如何运作,在LevelMeter.m中回答:

- (CGFloat)level { return _level; }
- (void)setLevel:(CGFloat)v { _level = v; }

答案 1 :(得分:0)

下划线表示只能从其自己的类中访问的内容。因此,不应该从类外部访问实例变量,但属性可以是。