Objective-C:自定义 setter 中的 if 语句

标签 objective-c getter-setter

自定义 setter 中 if 语句的用途是什么?我在示例代码中经常看到这个例程。如果使用 ARC,为什么还要检查相等性呢?

- (void)setPhotoDatabase:(UIManagedDocument *)photoDatabase
{
    if (_photoDatabase != photoDatabase) {
        _photoDatabase = photoDatabase;
        ...
    }
}

最佳答案

重要的部分通常是更改后的内容(... 中的内容):分配新值后的副作用,这可能会非常昂贵。

最好限制这些更改,以避免引发不必要的且可能代价高昂的副作用。假设您更改了一个文档,那么您可能需要更改与该文档相关的 ui 的很大一部分,以及模型更改。

检查条件后,可能会缩短大量不必要的/更改工作,从而避免进行不必要的更改。

这种不必要的副作用很容易使您的应用程序在 CPU、绘图、对象创建、写入磁盘等方面的实际工作黯然失色 - 几乎任何事情。

无论您相信与否,许多应用程序确实执行了大量不必要的工作,即使它们设计得非常好。基于 View 的渲染系统中的绘图和用户界面更新可能是我能想到的最好的例子。在该领域中,可以实现大量细节来最大限度地减少冗余绘图。

关于Objective-C:自定义 setter 中的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12608672/

相关文章:

objective-c - Mac应用程序: 'Auto Loading' the last used Document

带有 xcode 8 GM 的 iOS 10 GM 由于 roundedCorners 和 clipsToBounds 导致 View 消失

java - 使用java反射覆盖复杂对象实例中的值

php - 在 Enterprise Architect 中为 PHP 生成 getters 和 setters

java - 有很多 getters & setters 是个好主意吗?

objective-c - Objective-C 的良好 SQLite 包装器

objective-c - 从其他类委托(delegate)返回值

objective-c - 这是什么 cocoa 类?

python - c 速度 cython 属性,可能吗?备择方案?

java - 为什么要将 getter 和 setter 方法声明为私有(private)?