再看文檔時留意到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"); }
前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方法。