对象的等同性--Effective笔记

对象之间的对比相同操作,一般会想到==操作符,但是在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方法时,应该使用计算速度快而且哈希码碰撞几率低的算算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容