Jam*_*sev 7 objective-c naming-conventions
可能重复:
在Objective C中使用下划线前缀属性名称
在Objective-C的书中我正在阅读,在我看到的一些代码中,有时人们会在变量名称中添加下划线.
虽然我意识到这是由于一个既定的惯例,我想知道:
下划线是先于还是完成变量名称是否有任何意义?例如,_name, name and name_作为Objective-C程序员,如果有什么,下划线对您有意义吗?
Pau*_*l.s 18
这在很大程度上取决于个人风格和防守节目.但这是我个人使用并且看到人们使用前缀的主要原因.
这是为了让您更清楚地了解您是直接访问ivar还是使用getter/setter.
如果我有:
@property (nonatomic, retain) NSArray *people;
Run Code Online (Sandbox Code Playgroud)
和:
@synthesize people = _people;
Run Code Online (Sandbox Code Playgroud)
这将编译并生成如下的getter/setter声明:
- (void)setPeople:(NSArray *)people;
- (NSArray *)people;
Run Code Online (Sandbox Code Playgroud)
现在直接访问我需要使用的ivar:
_people
Run Code Online (Sandbox Code Playgroud)
要使用getter/setter,我可以使用点表示法或getter/setter,如:
[self people];
// or
self.people; // which compiles to [self people];
// and
[self setPeople:newPeople];
// or
self.people = newPeople; // which compiles to [self setPeople:newPeople];
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中如果我不小心只输入:
people = newPeople; // will not compile
Run Code Online (Sandbox Code Playgroud)
它不会编译,因为我没有使用getter/setter,并且没有ivar people应该是_people.
单个前导下划线是Apple内部编码约定,他们这样做是为了使它们的符号不会与您的符号冲突.不幸的是,苹果公司一直在发布遵循这种习惯的代码示例,所以苹果以外的很多人都认为这是一件好事.
如果要在ivar和方法名称上使用前缀,请使用除单个前导下划线之外的任何内容.
| 归档时间: |
|
| 查看次数: |
8531 次 |
| 最近记录: |