转自:
1、http://blog.youkuaiyun.com/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)
}