美文网首页
对象的等同性--Effective笔记

对象的等同性--Effective笔记

作者: 夜者无念 | 来源:发表于2017-04-28 14:42 被阅读7次

    对象之间的对比相同操作,一般会想到==操作符,但是在Objective-C ==操作符比较出来的结果未必是我们想要的,因为该操作比较的是两个指针本身,而不是其所指的对象。应该使用NSObject协议中声明的“isEqual”:方法来判断两个对象的等同性。

    NSString *foo = @“Badger 123”;
    NSString *bar = [NSString stringWithFormat:@"Badger %i",123];
    BOOL equalA = (foo == bar); // NO
    BOOL equalB = [foo isEqual:bar]; //YES
    BOOL equalC = [foo isEqualToString:bar]; //YES

    NSObject 协议中 hash 也是判断等同性的操作 与 isEqual 一样

    1,若想检测对象的等同性,请提供“isEqual:”与hash方法
    2,相同的对象必须具有相同的哈希吗,但是两个哈希吗相同的对象却未必相同
    3,不要盲目地逐个检测每条属性,而是应该依照具体需求制定检测方案
    4,编写hash方法时,应该使用计算速度快而且哈希码碰撞几率低的算算法

    相关文章

      网友评论

          本文标题:对象的等同性--Effective笔记

          本文链接:https://www.haomeiwen.com/subject/rrrnzttx.html