【问题标题】:iOS do I need to check for object equality when writing my own property setter?iOS 在编写自己的属性设置器时是否需要检查对象是否相等?
【发布时间】:2014-12-02 06:52:42
【问题描述】:

我正在查看一些 Apple 代码,发现它们在手动创建的属性设置器中进行了相等检查(见下文)。在我自己的代码中,我经常只使用_datasource = datasource; 省略相等检查有什么问题吗?是否有任何 ARC 含义,例如双重保留?

@property (nonatomic,strong)NSArray* datasource;

-(void)setDatasource:(NSArray *)datasource
{
//is there anything wrong if this test is missing?
    if(_datasource != datasource)
    {
        _datasource = datasource;
    }
}

【问题讨论】:

  • 如果这就是你的整个setter方法,那就完全没必要写了。
  • 通常我在这个方法的末尾添加一个表格视图刷新或类似的代码

标签: ios objective-c properties automatic-ref-counting


【解决方案1】:

您可以毫无疑问地使用您的方法。 ARC 将自动保留/释放您的基础 ivar(您将其声明为强)。 我认为 Apple 代码中的这种检查仍保留在过去的版本中,该版本处于手动内存管理之下。

【讨论】:

    【解决方案2】:

    它与内存管理无关。这样做的唯一原因是您以后可能希望向您的 setter 添加一些附加功能(毕竟这是自定义 setter 的目的),如果此代码仅针对特定对象调用一次通常是好的。

    【讨论】:

      【解决方案3】:

      程序员正在检查是否有人试图将相同的对象分配为值。如果他们这样做,则不会发生假设会使您的代码更有效率的分配。

      【讨论】:

        猜你喜欢
        • 2021-08-08
        • 2020-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        • 2023-04-06
        • 2010-11-22
        • 1970-01-01
        相关资源
        最近更新 更多