HashBuilder
用于从贡献的对象或哈希生成哈希值(可能是对象上的属性,应在实现isEqual:时考虑)。目的是从NSObject的- (NSUInteger)hash
方法的重写中返回哈希结果。
安装
如果您使用的是CocoPods,只需将其添加到您的Podfile中即可。
pod 'HashBuilder', '~> 1.0'
否则,只需将HashBuilder子目录的内容添加到项目中。
文档
要使用它,创建一个HashBuilder对象,向其中添加贡献,然后查询'builtHash'属性以获取结果哈希。
- (NSUInteger)hash
{
HashBuilder *builder = [HashBuilder builder];
[builder contributeObject:self.objectID];
[builder contributeObject:self.occurredDate];
[builder contributeObject:self.type];
[builder contributeObject:self.objectURL];
[builder contributeObject:self.tags];
[builder contributeObject:self.count];
NSUInteger retVal = builder.builtHash;
return retVal;
}
务必在重写您的- (BOOL)isEqual:(id)object
方法时考虑相同的属性。
注意:贡献顺序将产生影响哈希结果,即使贡献了相同的值也是如此。例如
HashBuilder *builder1 = [HashBuilder builder];
[builder1 contributeObject:@"a"];
[builder1 contributeObject:[NSNumber numberWithInteger:12345]];
NSUInteger hash1 = builder1.builtHash;
HashBuilder *builder2 = [HashBuilder builder];
[builder2 contributeObject:[NSNumber numberWithInteger:12345]];
[builder2 contributeObject:@"a"];
NSUInteger hash2 = builder2.builtHash;
hash1 != hash2
免责声明和许可协议
- 本作品采用了Mike Ash在其题为《Implementing Equality and Hashing》的博客文章中提出的技巧和概念。
- 本作品受Creative Commons Attribution 3.0 Unported License许可。请参见包含的LICENSE.txt文件以获取完整详情。
关于
我是一名iOS工程师,白天从事专业工作,名叫Levi Brown。我是一位技术博客作者,我的博客是grokin.gs,可通过以下方式联系我:
Twitter @levigroker
电子邮件 [email protected]
欢迎您提出宝贵的意见和建议。