ios开发之判断对象的等同性isEqual

 在开发中我们经常会遇到这样的情况:判断两个元素或者对象是否相等。经常用到的有“==”或者isEqual或者isEqualToString等等。下边我们就来介绍一下这几种方法的区别。

一、 “ == ”
“==”操作符判断的是两个指针本身(也就是两个对象的内存地址),而不是所指的对象。

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");  
}  

控制台输出结果:== NO

从上边可以看出来,str1和str2打印出来的结构都是bound 123,但是if判断输出NO,从内存地址看,发现两者内存地址不同,由此可以看出“ == ”判断比较的是两个“指针”本身,而不是对象。

二、“- (BOOL)isEqual:(id)object; ” “+ (NSUInteger)hash;”
NSObject协议中声明了判断对象等同性的两个方法,这两个方法返回相等条件是:当且仅当“指针值”完全相等的时候,对象才相等。如果isEqual判断两个对象相等,那么两个对象的hash返回值也一定相等。反之hash值相等,isEqual未必认为两者一样。

三、“- (BOOL)isEqualToString:(NSString *)aString; ”
isEqualToString声明了判断字符串相等的方法,有时候为了简洁可以使用二中方法来代替使用,但是个人认为对于大多数NSObject对象慎用“- (BOOL)isEqual:(id)object; ”方法!许多情况下会由于对指针管理的疏忽引起莫名奇妙的crash,由于时间问题暂时总结到这里,之后会对适合使用“- (BOOL)isEqual:(id)object; ”的场合作详细研究与整理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值