2013-05-03 103 views
1

很明显,@synthesize为对象定义了setter和getter。@合成“_”符号

但目前尚不清楚对我说:

@synthesize managedObjectContext = _managedObjectContext; 

是什么意思?为什么不以这种方式实现它:

@synthesize managedObjectContext; 

这似乎更容易?

另外,它是否与懒惰的编程有关,这意味着你必须自己编写setter和getter?

希望有人可以帮助;)

+1

你不需要再合成了,因为xcode 4.2(?),它会被隐式添加为'@sythesize foo = _foo;'所以最懒惰的编程就是不合成和使用下划线。但不检查文档不是懒惰的编程 - 这太懒惰了。 – vikingosegundo 2013-05-03 15:54:37

回答

2

这只是一个约定人们用它来给财产和伊娃名字不同。该物业将被称为managedObjectContext,iVar将被称为_managedObjectContext

如果他们都被命名为相同,那么将它们混淆可能相当容易,而将它们混合起来可能会产生意想不到的结果,因为使用iVar名称将绕过该属性上的任何setter和getter。

除此之外,它没有实际功能。

+0

那么我应该什么时候以这种方式实施呢?因为通常我们只是简单地将它合成为后者,例如@synthesize certainButton; – JackieLam 2013-05-03 15:37:52

+0

另外,它是否与懒惰的编程有关,这意味着你必须自己编写setter和getter? – JackieLam 2013-05-03 15:38:43

+0

@JackieLam认为它更像一种方便而不是规则。它只是将iVar重命名为使它更难以混淆两者,它使iVar或属性的功能完全没有区别。比较一下ObjectiveC中的缩进,这对于可读性很方便,很多人都这样做,但是在代码的功能上没有任何区别。 – 2013-05-03 15:39:26