自定义 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/