相关疑难解决方法(0)

覆盖isEqual:和hash的最佳实践

你如何isEqual:在Objective-C中正确覆盖?"catch"似乎是如果两个对象相等(由isEqual:方法确定),它们必须具有相同的散列值.

" 可可基础指南"的 " 内省"部分确实有一个示例,说明如何为名为的类重写,如下所示:isEqual:MyWidget

- (BOOL)isEqual:(id)other {
    if (other == self)
        return YES;
    if (!other || ![other isKindOfClass:[self class]])
        return NO;
    return [self isEqualToWidget:other];
}

- (BOOL)isEqualToWidget:(MyWidget *)aWidget {
    if (self == aWidget)
        return YES;
    if (![(id)[self name] isEqual:[aWidget name]])
        return NO;
    if (![[self data] isEqualToData:[aWidget data]])
        return NO;
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

它检查指针相等性,然后检查类相等性,最后比较使用的对象isEqualToWidget:,它只检查namedata属性.该示例显示的是如何覆盖hash.

比方说,让我们假设有其他属性不会影响平等age.如果没有hash方法被覆盖,使得只有namedata影响哈希?如果是这样,你会怎么做?只需添加的哈希 …

equality objective-c

266
推荐指数
11
解决办法
9万
查看次数

标签 统计

equality ×1

objective-c ×1