OC——52个有效方法:8.对象等同性

2017-08-11  本文已影响25人  梦蕊dream

如果已知两个受测对象是属于同一类,判断等同的方法:

NSObject中协议声明判断对象的等同性方法:

自定义对象重写isEqual方法

第一步 自定义一个判断类等同的方法 该类是:LPAlertObject

- (BOOL)isEqualAlertObject:(LPAlertObject *)object{
    if (self == object) {
        return YES;
    }
    if ([self class] != [object class]) {
        return NO;
    }
    NSString *name;
    LPAlertObject *alert = (LPAlertObject *)object;
    if (![_name isEqualToString:object.name]) {
        return NO;
    }if (_age != alert.age) {
        return NO;
    }
    return YES;
}
- (BOOL)isEqual:(id)object{
    if([self class] == [object class])
        return [self isEqualAlertObject:(LPAlertObject *)object];
    else
        return [super isEqual:object];
}

这两步就完成了自定义类的等同性判断方法

等同性判断的执行深度

在等同性判断方法中是否需要监测全部字段需要开发者自行定义,比如有的数据判断一个标志就可以判断是否相等,类似主键。

容器中可变类的等同性

1.arrayA = [1,2]; 存入Set,set内存的是(1,2)
2.arrayB = [1,2]; 存入Set,set内存的是(1,2)
注:set判断数组相等 就是不添加了
3.arrayC = [2]; 存入set,set内存的是(1,2),(2)
若:arrayC里面的数据改成arrayC = [1,2];
那:set内存的是(1,2),(1,2)
如:setB = [set copy]; setB里面存的(1,2)

set语义不允许存相等的变量,如果把对象存入set再改变其内容,后果难以预料

总结

上一篇 下一篇

猜你喜欢

热点阅读