使用'变量'与'_变量'?

时间:2011-11-16 07:20:20

标签: objective-c ios

  

可能重复:
  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;

所以基本上,这是什么目的?

3 个答案:

答案 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所做的 - 但并非必须如此。关键是,属性和实例变量经常在一起但是是不同的。