这里有很多关于为什么要通过@synthesized setter(而不是直接访问伊娃),保留/复制内存管理或KVO。使用@synthesized getter有什么意义?
但我想不出为什么你会在意如果你使用foo = self.bar
或foo = bar
的好论据。
我能想到的唯一的事情就是数据抽象......如果bar是一个声明的属性,那么底层的实现可能会改变,没有人会关心。 (当然,在这种情况下,你可能不会使用@synthesized getter)
因此......使用@synthesized getters的任何令人信服的理由?是否有一些线程问题使其变得重要?
对于这个问题,@synthesized代码甚至可以做什么,除了返回伊娃吗?
你的懒加载的例子,虽然将需要一个自定义getter ...不是@synthesized之一。我当然可以看到自定义获得者的需要。线程安全点是一个好的选择。 – wrjohns 2012-07-31 12:05:07
问题是,如果现在不使用合成的getter,而是直接使用ivar访问,那么以后不能更改实现(例如,通过添加延迟加载),而不必重写所有对ivar的访问。这可能是一个问题,如果直接ivar访问泄漏到您的子类或甚至您的API用户。 – zoul 2012-07-31 14:01:02
啊,我明白你的意思了。 – wrjohns 2012-07-31 14:14:45