再看文档时留意到isEqual方法,但是我们比较的时候有时候就用==来比较,这2个有似乎没区别呢?网上有人说==来比较指针,isEqual是比较内容,其实这个话如果深究起来,并不是那么准确,我用代码测试了下:
- NSString*
str1=@"111"; - NSString*
str2=@"111"; -
- if([str1
isEqual:str2]){ -
NSLog(@"isEqual is YES"); - }
-
- if(str1==str2){
-
NSLog(@"== is YES"); - }
- UIImage*
img1=[UIImage imageNamed:@"img1"]; - UIImage*
img2=[UIImage imageNamed:@"img1"]; - if([img1
isEqual:img2]){ -
NSLog(@"isEqual is YES"); - }
-
- if(img1==img2){
-
NSLog(@"== is YES"); - }
- UIImageView*
imgv1=[[UIImageView alloc]initWithImage:img1]; - UIImageView*
imgv2=[[UIImageView alloc]initWithImage:img1]; - if([imgv1
isEqual:imgv2]){ -
NSLog(@"isEqual is YES"); - }
- if(imgv1==imgv2){
-
NSLog(@"== is YES"); - }
总结如下:
1.isEqual应该是比较内容的指针,反映在hashcode上,内容相同,并不代表isEqual返回true,比如说UIImageView的内容都是img1,但是isEqual返回NO,所以要谨慎使用isEqual而是要使用衍生方法,比如说isEqualToString
2.如果UIImage没有创建成功,比如说图片没有,则返回nil,这个时候isEqual则返回NO,虽然hash值都是0
3.如果要改变默认方式,则实现isEqual:方法和hash方法。