为什么Xcode 4自动生成一个实例variables?

我来自C#开发,并开始学习Objective-C和Xcode 4.据我所知,“@synthesize”是取代getter / setter方法的属性,如果你不需要检查/控制值正在读或写。

但为什么Xcode 4会自动为我创build一个实例variables?

这不够:

@synthesize myProperty; 

代替:

 @synthesize myProperty = _myProperty; 

为什么我要使用/有实例variables,而不是实际属性,如果我不需要任何getter或setters?

提前致谢!

MemphiZ

编辑:

我知道@synthesize正在取代getters / setters,但这是什么部分好: = _myProperty; ? 为什么我想要有一个实例variables,如果我可以直接使用“myProperty”? 我会理解使用“_myProperty”如果setter例如将检查值的条件。 如果我然后想跳过这个检查,我会使用_myProperty。 但是,当我使用@synthesize时,我没有一个setter来做一些检查。 那么,为什么我有/想要一个实例variables呢?

回答:

查看MattyG的post中的评论!

这是一个习惯提醒程序员通过setter和getters自己访问实例variables的惯例。 所以如果你使用:

 @synthesize myProperty = _myProperty; 

然后直接访问variables,你必须写:

 _myProperty = something; 

要通过它的setter访问variables,你必须写:

 self.myProperty = something; 

好处是,如果你忘记通过自我访问。 那么编译器会警告你:

 myProperty = something; //this won't compile 

看到这个也是这个问题 。

那么,你在.h文件中声明一个属性的实例variables,以及属性本身。 该属性的接口以及它将要使用的实例variables已经被build立…它的实现没有。 这就是@synthesize关键字出现的地方。它只是为你实现属性,所以你不必自己写出来。

以下是在C#中声明属性的方法

 private int _int1; public int int1 { get { return _int1; } set { _int1 = value; } } 

这是一段非常常见的代码,C#让你缩写它,以避免不得不一遍又一遍地input相同的东西

 public int int1 { get; set; } 

这两个代码段之间的区别在于后者中不存在私有variables“_int1”,因为C#在内部创build了一个variables。 @synthesize关键字是很好的,因为它可以节省你一遍又一遍地写下相同代码的麻烦,同时还允许你访问它所基于的实例​​variables。

编辑。 同样重要的是要注意getter和setter确实存在于Objective C中。它们的名称与C#中的名称不同,它们被标记为get {}和set {}。 在目标C中,getter是一个与其实例variables名称相同的方法,setter是一个单词“set”的方法,后面跟着实例variables的名称,第一个字母大写。

所以,可以说你在你的.h文件中有这个

 int myVar; ... @property(nonatomic, assign) int myVar; 

您可以在.m文件中自己实现getter和setter

 -(int)myVar { return myVar; } -(void)setMyVar:(int)newVar { myVar = newVar; } 

或者你可以使用@synthesize来让getter和setter自动写入