打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
isEqual和==区别

再看文档时留意到isEqual方法,但是我们比较的时候有时候就用==来比较,这2个有似乎没区别呢?网上有人说==来比较指针,isEqual是比较内容,其实这个话如果深究起来,并不是那么准确,我用代码测试了下:

  1. NSString* str1=@"111";  
  2. NSString* str2=@"111";  
  3.   
  4. if([str1 isEqual:str2]){  
  5.         NSLog(@"isEqual is YES");  
  6. }  
  7.   
  8. if(str1==str2){  
  9.         NSLog(@"== is YES");  
  10. }  
  11. UIImage* img1=[UIImage imageNamed:@"img1"];  
  12. UIImage* img2=[UIImage imageNamed:@"img1"];  
  13. if([img1 isEqual:img2]){  
  14.         NSLog(@"isEqual is YES");  
  15. }  
  16.   
  17. if(img1==img2){  
  18.         NSLog(@"== is YES");  
  19. }  
  20. UIImageView* imgv1=[[UIImageView alloc]initWithImage:img1];  
  21. UIImageView* imgv2=[[UIImageView alloc]initWithImage:img1];  
  22. if([imgv1 isEqual:imgv2]){  
  23.         NSLog(@"isEqual is YES");  
  24. }  
  25. if(imgv1==imgv2){  
  26.         NSLog(@"== is YES");  
  27. }  
前2个比较NSString和UIImage,都返回YES,后面则没有返回YES.

总结如下:

1.isEqual应该是比较内容的指针,反映在hashcode上,内容相同,并不代表isEqual返回true,比如说UIImageView的内容都是img1,但是isEqual返回NO,所以要谨慎使用isEqual而是要使用衍生方法,比如说isEqualToString

2.如果UIImage没有创建成功,比如说图片没有,则返回nil,这个时候isEqual则返回NO,虽然hash值都是0

3.如果要改变默认方式,则实现isEqual:方法和hash方法。



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Objective
网络(4.1)—AFNetworking多任务异步请求
IOS上传图片方法类
NSString 如何判断字符串含有中文字符??
UITableView长按Cell出现选择(剪切复制粘贴全选)菜单并执行相应的操作
IOS学习笔记之十一(包装类、description、isequal)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服