我正在-isEqual:
为我的自定义类实施。相等性基于属性值,即。如果所有属性都相等,则认为对象相等。与传统的类检查一起,代码如下所示:
- (BOOL) isEqual: (id) object
{
return [object class] == [self class]
&& [[object someProperty] isEqual:someProperty]
&& [[object otherProperty] isEqual:otherProperty];
}
但这对于nil
属性值失败,即。nil
具有存储值的类的两个对象someProperty
被认为是不相等的,而我希望它们相等。因此,我得到了以下版本:
- (BOOL) isEqual: (id) object
{
#define equals(a, b) ((a == b) || ([a isEqual:b]))
return equals([object class], [self class])
&& equals([object someProperty], someProperty)
&& equals([object otherProperty], otherProperty);
}
这似乎工作正常。这是解决平等的“标准”方式吗?对我来说似乎过于复杂。