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

War*_*ior 5 iphone cocoa cocoa-touch objective-c

可能重复:
cocoa objective-c类中变量前面的下划线如何工作?

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

 @interface LevelMeter : UIView {

CGFloat                     _level, _peakLevel;

   }
Run Code Online (Sandbox Code Playgroud)

该物业被设定为

 @property                      CGFloat level;
 @property                      CGFloat peakLevel;
Run Code Online (Sandbox Code Playgroud)

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

mou*_*iel 1

提醒

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

@property CGFloat level;
Run Code Online (Sandbox Code Playgroud)

可以替换为

- (CGFloat)level;
- (void)setLevel:(CGFloat)v;
Run Code Online (Sandbox Code Playgroud)

你的问题

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

它是如何工作的,答案如下LevelMeter.m

- (CGFloat)level { return _level; }
- (void)setLevel:(CGFloat)v { _level = v; }
Run Code Online (Sandbox Code Playgroud)

  • 之所以给ivar添加下划线,只是为了让代码中ivar和property的区别更加清晰。苹果似乎相当广泛地使用这种风格。您不必自己编写访问器方法:`@synthesize level = _level;`将在两者之间建立自动连接。 (9认同)