可能重复:
How does an underscore in front of a variable in a cocoa objective-c class work?
我目前正在学习Objective-C,而且我正在学习使用变量有点搞笑的教程(至少对我来说!)。
基本上,类变量声明如下:
@interface .. {
UITextField *_titleField;
UIImageView *_imageView;
}
@property (retain) IBOutlet UITextField *titleField;
@property (retain) IBOutlet UIImageView *imageView;
然后像这样合成:
@synthesize titleField = _titleField;
@synthesize imageView = _imageView;
所以基本上,这是什么目的?
答案 0 :(得分:1)
titleField 是合成属性, _titleField 是其支持字段。
也许http://mutelight.org/articles/the-objective-c-retain-property-pattern会帮助您更好地理解
答案 1 :(得分:1)
通常人们使用_
字符作为实例变量的标记(在其他语言中为a.k.a.,'field'或'member'等)。有些人在变量名后添加下划线,有些人在之前说过,有些人根本不使用它,有些人使用不同的前缀。这个想法是,它可以帮助您一目了然地区分什么是实例变量,哪些不是。
当然,如果您决定以特定方式命名实例变量,但仍希望您的属性具有“看起来很正常”的名称,则需要将“正常”名称映射到“实例变量” '名字。
答案 2 :(得分:0)
属性只是一对方法的标记 - ' foo'和' setFoo' (除非该属性是readonly,在这种情况下,只有' foo'将合成)。变量(那些是实例,而不是类变量,BTW)是实际的内存存储。属性可以与内存存储相关联 - 这就是@synthesize所做的 - 但并非必须如此。关键是,属性和实例变量经常在一起但是是不同的。