关于iphone:为什么使用下划线表示实例变量,而不是相应的属性?

Why do you use an underscore for an instance variable, but not its corresponding property?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?

我是iPhone开发的新手,我正在研究iPhone中的语音记录。我从苹果下载了"在这里说话"示例程序。它由levelmeter.h文件组成,其中

1
2
3
4
5
 @interface LevelMeter : UIView {

CGFloat                     _level, _peakLevel;

   }

属性设置为

1
2
 @property                      CGFloat level;
 @property                      CGFloat peakLevel;

声明变量(如级别)并将其属性设置为级别有什么用?请解释我。谢谢。


提醒

@property指令相当于声明setter和getter。对于level

1
@property CGFloat level;

可替换为

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

你的问题

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

它的工作原理,在LevelMeter.m中得到了回答:

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


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