为什么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自动写入