对象等同性判断
来源:互联网 发布:怎么在淘宝上搜店铺号 编辑:程序博客网 时间:2024/04/30 12:39
(1)“==”
==操作比较的是两个指针本身,即对象存放的地址,而不是其所指的对象。应该使用“isEqual:”方法来判断两个对象的等同性。
下面一个例子可以说明==与等同性方法之间的差别
NSString *str1 = @"bound 123"; NSString *str2 = [NSString stringWithFormat:@"bound %@",@"123"]; NSLog(@"%@,%p",str1,&(str1)); NSLog(@"%@,%p",str2,&(str2)); if (str1 == str2) { NSLog(@"== YES"); } else { NSLog(@"== NO"); }
控制台输出结果:
2015-03-12 16:30:15.699 IsEqual[1711:607] bound 123,0xbfffc80c
2015-03-12 16:30:15.699 IsEqual[1711:607] bound 123,0xbfffc808
2015-03-12 16:30:15.700 IsEqual[1711:607] == NO
从上面的例子中可以看出,NNString类等同性判别使用“==”会出错,应该使NNString实现的独有的等同性判断方法“isEqualToString”。调用该方法比调用父类NSObject的isEqual:方法快,因为后者不知道受测对象的类型。
注意:NSArray的等同性判断方法是“isEqualToArray”,NSDictionary的等同性判断方法是“isEqualToDictionary”
(2)NSObject中等同性判断的实现
NSObject中等同性判断的实现主要实现两个关键方法
-(BOOL)isEqual:(id)object;
-(NSUInteger)hash;
NSObject中这两个方法的默认实现是:当且仅当其“指针值”完全相等时,这两个对象才相等。如果“isEqual:”方法判断两个对象相等,那么其hash必须返回同一个值,反之如果对象的hash方法返回同一个值,“isEqual”方法未必认为两个对象相等。
重写某类的等同性判断方法时需重写“isEqual:”和“hash”方法。
- 对象等同性判断
- iOS判断对象等同性
- iOS 对象等同性
- 对象等同性
- ios开发之判断对象的等同性isEqual
- Objective-C——判断对象等同性
- 判断对象的等同性isEqual和hash
- ios开发之判断对象的等同性isEqual
- 引用等同性与对象等同性及对象复制
- hibernate之对象同一性和等同性
- Objective-C的对象等同性
- Objective-C对象等同性的理解
- 如何理解iOS的“对象等同性”
- Swift 等同性判断 Hashable Equatable ==
- Objective-C中“对象等同性”的判定方法
- Effetive Objective - C 1.Objective8.;理解对象等同性
- iOS理解“对象等同性”这一概念
- Effective Objective-C 2.0 编写高质量iOS与OS X代码 对象等同性
- 【Android】(已更新解决方案)更新SDK版本(25)后,自定义FloatingActionButton的Behavior(跟随列表滑动显示隐藏)只隐藏不出现的问题
- 文件夹复制
- 关于FFMPEG 中I帧、B帧、P帧、PTS、DTS
- Asp.Net MVC4.0 官方教程 入门指南之一-- 入门介绍
- 产品:了解一下产品运营
- 对象等同性判断
- JAVA中循环的递归问题
- oj1608: 1!到n!的和
- Python Flask Web框架(一)
- QT QListWidget删除item和插入widget
- js实现冒泡排序
- linux shell脚本中$$.$0,$1等的含义
- Android动态加载Dex机制解析
- POJ2778 DNA Sequence AC自动机+矩阵快速幂