ObjC中isEqual与==的区别

isEqual是NSObject的方法,我们常用它来判断两个object是否相等, 而==也常用来来判断两个object是否相等,那么它们有什么区别呢。

看一段代码就明白了:

  1. //MyItem.h  
  2. @interface MyItem : NSObject {  
  3. @private  
  4. NSString *identifier;  
  5. }  
  6. @property (nonatomic, copy) NSString *identifier;   
  7. - (id)initWithIdentifier:(NSString *)anIdentifier;   
  8. @end  
  9.   
  10. //MyItem.m   
  11. @implementation MyItem   
  12.   
  13. @synthesize identifier;  
  14.   
  15. - (id)initWithIdentifier:(NSString *)anIdentifier {   
  16.     if (self = [super init]) {  
  17.         self.identifier = anIdentifier; }  
  18.     return self;  
  19. }  
  20. - (BOOL)isEqual:(id)object {  
  21. // By default, if two variables point to the same object in memory, it should always be // equal  
  22.     if (object == self) {  
  23.         return YES;   
  24.     }  
  25.     if (![object isKindOfClass:[MyItem class]]) {   
  26.         return NO;  
  27.     }  
  28.     MyItem *myItem = (MyItem *)object;  
  29.     return [myItem.identifier isEqual:self.identifier];   
  30. }  
  31. - (NSUInteger)hash {  
  32.     return [self.identifier hash];  
  33. }  
  34. @end  


  1. MyItem *item1 = [[MyItem alloc] initWithIdentifier:@"1"];  
  2. MyItem *item2= [[MyItem alloc] initWithIdentifier:@"1"];  
  3.   
  4. BOOL ret1 = [item1 isEqual:item2];  
  5. BOOL ret2 = (item1 == item2);  

看到这儿,请读者猜猜ret1与ret2的值是多少?


上面空了那么多,是时候说答案了。 ret1值为YES, ret2值为NO。

原因就是isEqual比较的是hash返回的值,而==只是简单的内存地址比较,大部份情况==为YES的,isEqual也为YES,如果isEqual为YES的不一定==也为YES。明白了吗?


原文链接:http://blog.csdn.net/favormm/article/details/7594669



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值