Why put underscore “_” before variable names in Objective C
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?
在目标C中,我看到许多代码在变量名前加下划线,例如somevariable
为什么会这样?另外,如何编写访问器,即获取和设置此类变量的方法。
不要这样做。
单前导下划线是一种Apple内部编码约定。他们这样做是为了让他们的ivar名字不会与你的名字冲突。如果要在ivar名称上使用前缀,请使用除单个下划线之外的任何内容。
下划线通常用来表示变量是实例变量。这不是真正必要的,因为ivar可以与它们的属性和访问器具有相同的名称。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 | @interface MyClass : NSObject { NSString *_myIVar; // can be omitted, see rest of text } // accessors, first one is getter, second one is setter - (NSString *) myIVar; // can be omitted, see rest of text - (void) setMyIVar: (NSString *) value; // can be omitted, see rest of text // other methods @property (nonatomic, copy) NSString *myIVar; @end |
现在,不需要自己声明和编码访问器
1 2 3 4 5 6 7 8 | @implementation MyClass @synthesize myIVar; // generates methods myIVar and setMyIVar: for you, // with proper code. // also generates the instance variable myIVar // etc... @end |
请确保完成字符串:
1 2 3 4 | - (void) dealloc { [myIVar release]; [super dealloc]; } |
fwiw,如果您想做的不仅仅是getter或setter的默认实现,您仍然可以自己编写其中的一个或两个代码,但随后您还必须处理内存管理。在这种情况下,编译器将不再生成该特定的访问器(但如果只手动完成一个访问器,则仍将生成另一个访问器)。
属性访问方式为
1 | myString = self.myIVar; |
或者,来自另一类:
1 | theString = otherClass.myIVar; |
和
1 | otherClass.myIVar = @"Hello, world!"; |
在我的课堂上,如果你省略了
这是一个命名约定,通常用于C++来定义实例变量,这些变量是私有的。
就像在U班
1 2 3 4 5 6 7 8 | private: int __x; public: int GetX() { return this.__x; } |
这是一个命名约定,我被迫在C++中使用。然而,我的老师从未告诉我们命名约定的名称。但我觉得这是有用的和可读的,特别是当你不使用Java命名约定。