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



1. str1=@"111";  
2. 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. img1=[UIImage imageNamed:@"img1"];  
12. 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. imgv1=[[UIImageView alloc]initWithImage:img1];  
21. 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方法。