zoukankan      html  css  js  c++  java
  • containsObject 总是不含有,你会用吗

    结论:containsObject:是在比较内存地址,即使两个对象内容完全一样,地址不同,那也是不同的。我个人认为这个方法应该叫是否存在同一个对象

    (开始不知道这个知识,被坑,至少浪费了3个钟头,数组里对象内容一样,就是不包含这个对象,MMP,自己无知怪谁呢)

           Person中包含name和age,分别表示名字和年龄,数组中包含多个Person,我们的目的是,如果数组中存在同样的人名,并且年龄完全相同,就舍弃新的Person,如何实现这个需求呢?我们需要重载isEqual方法。

    Person.h

    @interface Person : NSObject

    @property NSString *name;

    @property NSInteger age;

    @end

    Person.m 

    @implementation Person

    - (BOOL)isEqualToPerson:(Person *)person {

        if (!person) {

            return NO;

        }

        BOOL bIsEqualNames = (!self.name && !person.name) || [self.name isEqualToString:person.name];

        BOOL bIsEqualAges = self.age == person.age;

        return bIsEqualNames && bIsEqualAges;

    }

     

    #pragma mark - 重载isEqual方法

    - (BOOL)isEqual:(id)object {

        if (self == object) {

            return YES;

        }

        

        if (![object isKindOfClass:[Person class]]) {

            return NO;

        }

        return [self isEqualToPerson:(Person *)object];

    }

    @end


    viewController里调用时: 

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view.

        

        Person *A = [[Person alloc]init];

        A.name=@"zhangsan";

        A.age=18;

        

        Person *B = [[Person alloc]init];

        B.name=@"lisi";

        B.age=15;

        

        NSMutableArray *aArray = [[NSMutableArray alloc]init];

        [aArray addObject:A];

        [aArray addObject:B];

        

        Person *C = [[Person alloc]init];

        C.name=@"zhangsan";

        C.age=18;

        

        NSLog(@"%ld",[aArray containsObject:C]);

        

    }

    最终结果,打印1,证明aArray里含有了一个姓名为zhangsan、年龄为18的人。因为Person.m里的两个方法,声明了只要姓名和年龄内容相同,就认为是同一个人。

    如果注释掉Person.m里的两个方法,会打印0,因为系统默认的containsObject,比较对象的内存地址,C和A内存地址不一样,所以默认会被认为不含有C,而含有A。

  • 相关阅读:
    luogu 1865 数论 线性素数筛法
    洛谷 2921 记忆化搜索 tarjan 基环外向树
    洛谷 1052 dp 状态压缩
    洛谷 1156 dp
    洛谷 1063 dp 区间dp
    洛谷 2409 dp 月赛题目
    洛谷1199 简单博弈 贪心
    洛谷1417 烹调方案 dp 贪心
    洛谷1387 二维dp 不是特别简略的题解 智商题
    2016 10 28考试 dp 乱搞 树状数组
  • 原文地址:https://www.cnblogs.com/huangzs/p/11219235.html
Copyright © 2011-2022 走看看