<<Effective OC>>读书笔记 --- 第八条 理解“对象等同”这一概念
2016-11-07 13:57
225 查看
转自:
1、http://blog.csdn.net/womendeaiwoming/article/details/46419323
2、http://www.tuicool.com/articles/yIf6BjQ
比较两个对象是否相等是一个常用的功能。==操作符比较的不是对象,而是两个指针本身,一般来说这不是咱们所想要的。要想判断对象是否相等,应该使用 NSObject 协议中声明的isEqual:方法来判断。
1、http://blog.csdn.net/womendeaiwoming/article/details/46419323
2、http://www.tuicool.com/articles/yIf6BjQ
比较两个对象是否相等是一个常用的功能。==操作符比较的不是对象,而是两个指针本身,一般来说这不是咱们所想要的。要想判断对象是否相等,应该使用 NSObject 协议中声明的isEqual:方法来判断。
@interface Person : NSObject <NSCopying> @property (nonatomic, copy) NSString *name; @end @implementation Person - (BOOL)isEqual:(id)object { if (self == object) return YES; if (![object isKindOfClass:[Person class]]) return NO; return [self.name isEqualToString:[object name]]; } // Person.m - (NSUInteger)hash { return [self.name hash]; } - (id)copyWithZone:(NSZone *)zone { // (NSZone *)zone的含义就是为要建副本对象已经准备好了新开辟的内存空间 // 所有copy出来的对象是一个新的对象,修改它的属性不会影响源对象 // 这里[Person alloc]最好写成[self class] // 注:[self class]返回的是类,打印出来就相当于类名 // 这样子,子类继承就不用修改基类代码 Person *person = [[***[self class]*** allocWithZone:zone] init]; person.name = self.name; return person; } @end - (void)test { Person *person = [[Person alloc] init]; person.name = @"Lili"; NSDictionary *dic = @{person: @1}; Person *personCopy = [person copy]; id object = [dic objectForKey:personCopy]; NSLog(@"%@", [person isEqual:personCopy] ? @"YES" : @"NO"); // 输出:YES NSLog(@"%@", object); // 输出:(null) }
同时要注意不要修改原生类的 hash方法,因为hash table 需要hash code决定其存储位置。
相关文章推荐
- <<Effective OC>>读书笔记 --- 第六条 理解“属性”这一概念
- <<Effective OC>>读书笔记 --- 第十二条 理解消息转发
- <<Effective OC>>读书笔记 --- 第二十四条 将类的实现分散在不同文件中,便于管理
- <<Effective C++>>读书笔记4: 设计与声明
- <<Effective C++>>读书笔记(一)
- <<More Effective C++>>读书笔记4: 效率
- <<Effective C++>>读书笔记(1)
- <<More Effective C++>>读书笔记3: 异常
- <<Effective C++>>读书笔记9: 杂项讨论
- <<Effective C++>>读书笔记(三)
- <<More Effective C++>>读书笔记6: 杂项
- <<Effective C++>>读书笔记3: 资源管理
- <<Effective c++>>读书笔记---条款20:宁以pass-by-reference-to-const替换pass-by-value
- <<Effective C++>>读书笔记8: 定制new和delete
- <<Effective C++>>读书笔记7: 模板与泛型编程
- <<More Effective C++>>读书笔记2: 运算符
- <<Effective C++>>读书笔记(二)
- <<Effective c++>>读书笔记---条款19:设计class犹如设计type
- <<Effective C++>>读书笔记
- <<windows核心编程>>读书笔记---第9章 内核对象进行线程同步