Nat*_*Day 13 macos cocoa cocoa-touch objective-c ios
有没有办法确定一个类是否适合作为键并且将按预期工作,例如我想在NSDictionary中使用NSIndexPath作为键,但我不确定两个不同的NSIndexPath实例是否具有相同的整数值将始终返回相同的哈希值.
小智 9
Apple的NSObject的isEqual文件说:
如果两个对象相等,则它们必须具有相同的哈希值.如果在子类中定义isEqual:并打算将该子类的实例放入集合中,则最后一点尤为重要.确保您还在子类中定义哈希.
查看以下代码:
NSIndexPath *indexPath1 = [NSIndexPath indexPathForRow:0 inSection:0];
NSIndexPath *indexPath2 = [NSIndexPath indexPathForRow:0 inSection:0];
NSObject *obj1 = [[NSObject alloc] init];
NSObject *obj2 = [[NSObject alloc] init];
NSLog(@"NSIndexPath isEqual's Result: %d", [indexPath1 isEqual:indexPath2]);
NSLog(@"NSObject isEqual's Result: %d", [obj1 isEqual:obj2]);
Run Code Online (Sandbox Code Playgroud)
输出结果:
NSIndexPath isEqual的结果:1
NSObject isEqual的结果:0
NSObject isEqual的实现 是comare两个对象的地址,而hash实现是返回对象的地址.
NSIndexPath继承自NSObject,根据NSIndexPath isEqual输出结果,NSIndexPath的isEqual实现应该覆盖超类的isEqual方法,NSIndexPath也覆盖超类的哈希方法.
在attition中,NSIndexPath也符合NSCopying协议.
因此NSIndexPath可以用作NSDictionary的Key类.
| 归档时间: |
|
| 查看次数: |
3181 次 |
| 最近记录: |