isEqual和==区别

再看文档时留意到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方法。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值