在编写自己的属性setter时,我需要检查对象是否相等?

时间:2014-10-07 18:35:54

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

我正在审核一些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;
    }
}

3 个答案:

答案 0 :(得分:1)

您可以毫无疑问地使用您的方法。 ARC将自动保留/释放你的底层ivar(你宣称它是强大的)。 我认为Apple代码中的这个检查仍然是过去的版本,这是在手动内存管理下。

答案 1 :(得分:1)

它与内存管理无关。这样做的唯一原因是你以后可能想要为你的setter添加一些额外的功能(毕竟这是自定义setter的目的),如果这个代码只为特定对象调用一次,通常会很好。

答案 2 :(得分:0)

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