iOS 系统 API 给我们提供一个自动过滤重复元素的容器 NSMutableSet/NSSet。我们可能经常用 NSMutableSet/NSSet 过滤相同的字符串(NSSring 实例)。因为 NSMutableSet/NSSet 内部一些实现机制要比我们自己写的滤重方法效率高。但是对于自定义一个类如 Person,如果想利用 NSMutableSet/NSSet 来过滤重复元素(如多个 Person 实例的 uid 相同),我们必须要同时实现 - (BOOL)isEqual: 和 - (NSUInteger)hash 两个方法。这里先简单介绍他们的关系:两个相等的实例,他们的 hash 值一定相等。但是 hash 值相等的两个实例,不一定相等。在重写 - (BOOL)isEqual: 和 - (NSUInteger)hash 两个方法 的时候,切记一定要遵循上述规则。后面我们会详细分析只实现 - (BOOL)isEqual: 会遇到一些什么问题。