对象等同性判断

(1)“==”
==操作比较的是两个指针本身,即对象存放的地址,而不是其所指的对象。应该使用“isEqual:”方法来判断两个对象的等同性。
下面一个例子可以说明==与等同性方法之间的差别

 NSString *str1 = @"bound 123";  
 NSString *str2 = [NSString stringWithFormat:@"bound %@",@"123"];  

 NSLog(@"%@,%p",str1,&(str1));  
 NSLog(@"%@,%p",str2,&(str2));  

if (str1 == str2) {  

NSLog(@"== YES");  

} else {  

     NSLog(@"== NO");  

}  

控制台输出结果:
2015-03-12 16:30:15.699 IsEqual[1711:607] bound 123,0xbfffc80c
2015-03-12 16:30:15.699 IsEqual[1711:607] bound 123,0xbfffc808
2015-03-12 16:30:15.700 IsEqual[1711:607] == NO

从上面的例子中可以看出,NNString类等同性判别使用“==”会出错,应该使NNString实现的独有的等同性判断方法“isEqualToString”。调用该方法比调用父类NSObject的isEqual:方法快,因为后者不知道受测对象的类型。
注意:NSArray的等同性判断方法是“isEqualToArray”,NSDictionary的等同性判断方法是“isEqualToDictionary”

(2)NSObject中等同性判断的实现
NSObject中等同性判断的实现主要实现两个关键方法
-(BOOL)isEqual:(id)object;
-(NSUInteger)hash;

NSObject中这两个方法的默认实现是:当且仅当其“指针值”完全相等时,这两个对象才相等。如果“isEqual:”方法判断两个对象相等,那么其hash必须返回同一个值,反之如果对象的hash方法返回同一个值,“isEqual”方法未必认为两个对象相等。
重写某类的等同性判断方法时需重写“isEqual:”和“hash”方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的修养

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值