生成代码中的前导下划线

问题描述 投票:0回答:2

在阅读苹果生成的模板代码以及文档时,我看到

_
(下划线)和
__
(双下划线)。示例是检查核心数据选项时生成的代码:

@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

这每一项都意味着什么?我理解

_
指的是支持私有变量。
__
是什么意思?

ios objective-c iphone
2个回答
1
投票

乍一看,当您使用 getter/setter 方法以及何时直接访问 ivar 时,通常会让人感到困惑。

另一种方法是将 ivar 命名为与属性不同的名称。一种常见的方法是使用下划线作为 ivars 名称的前缀,如下所示 -

@interface RootViewController : UITableViewController 
{
    NSDate *_timestamp;
}
@property (nonatomic, retain) NSDate *timestamp;

要连接属性(其名称未更改),sythensize 语句会获得一个额外选项:

@implementation RootViewController

@synthesize timestamp = _timestamp;

本质上,如果 ObjectiveC 程序员遵循此约定(他们应该这样做)声明 ivars 并使用基本语法

@synthesize _window;
,那么该属性的用法会变得有些难看:
classInstance._window = myWindow
[classInstance set_window:myWindow]
。 使用语法
@synthesize window=_window;
允许 Obj-C 程序员利用流行的编程标准(前面带有
_
的 ivars),同时拥有使用 Apple 标准
classInstance.window = myWindow
[classInstance setWindow:myWindow]
的属性访问器。


0
投票

Apple 的文档建议不要在项目中使用单下划线(因为它由 Apple 本身保留:最著名的示例是 _cmd )。但下划线是传统的 C 风格修饰符,用于标识符的私有性,因此双下划线是为变量创建私有标识符的解决方案。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html

Cocoa 框架中大多数私有方法的名称都有一个 下划线前缀(例如 _fooData )将它们标记为私有。 根据这一事实,请遵循两条建议。

Don’t use the underscore character as a prefix for your private methods. Apple reserves this convention.
© www.soinside.com 2019 - 2024. All rights reserved.