gpt4 book ai didi

objective-c - 使用@synthesized getter 有什么意义?

转载 作者:行者123 更新时间:2023-12-04 05:37:32 27 4
gpt4 key购买 nike

关于为什么要通过 @synthesized setter (而不是直接访问 ivar)、保留/复制内存管理或 KVO 有很多内容。

但是我想不出一个很好的论据来解释为什么你会关心是否使用 foo = self.bar , 或 foo = bar .

我唯一能想到的就是数据抽象......如果 bar 是一个声明的属性,那么底层实现可能会改变,其他人不会关心。 (当然,在这种情况下,您可能不会使用@synthesized getter)

那么......使用@synthesized getter 有什么令人信服的理由吗?是否有一些线程问题使其变得重要?

就此而言,@synthesized 代码除了返回 ivar 之外还能做什么?

最佳答案

一个很好的理由是封装。当您通过访问器时,该类可以自由地在接口(interface)后面执行它想要的任何技巧(正如您在问题中已经说过的那样)。该值可能是延迟获取的,它可能是动态计算的,也可能是从其他对象中获取的。也就是说,在类实现中,我通常使用普通的 ivar 访问,因为如果属性实现发生更改,我可以自由地重写它。 (当在公共(public) header 中声明私有(private) ivars 时,这曾经是一个更大的问题,以便您的子类可以直接访问它们。)

至于线程,我认为默认的 getter/setter 组合是原子的,这意味着您不会得到一个错误,即 getter 将在 setter 中间被调用,从而获得一些无效值。我从未对这个问题进行过深入研究,请查看 nonatomic 的文档属性修饰符。 (或 this related question 。)

关于objective-c - 使用@synthesized getter 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11734497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com