结论: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 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。

最新文章

  1. coursera机器学习-聚类,降维,主成分分析
  2. twoSum
  3. css自定义字体
  4. 读<你必须知道的.NET>IL指令笔记
  5. Car---hdu5935(简单题)
  6. C++Primer 第九章
  7. css hack一览
  8. 【LeetCode】189 - Rotate Array
  9. 浅谈管道模型(Pipeline)
  10. 实现wpf的值转换器
  11. HDU4046--Panda(树状数组)
  12. Codeforces Round #449 (Div. 2)-897A.Scarborough Fair(字符替换水题) 897B.Chtholly's request(处理前一半) 897C.Nephren gives a riddle(递归)
  13. Python基本知识
  14. 深入理解C++11【2】
  15. Hbase存储流程
  16. Django框架(一)
  17. hql语句的case when then else end问题
  18. ng-深度学习-课程笔记-7: 优化算法(Week2)
  19. ubuntu 14.04/16.04/18.04 yum安装 zabbix-agent 教程
  20. 发现的好东西——bitset

热门文章

  1. java中的String、StringBuffer、StringBuilder的区别
  2. nginx搭建静态网站
  3. Zookeeper详解-安装(四)
  4. 【Linux杂记】Linux配置静态IP地址,修改主机名、host
  5. 【设计模式】行为型09访问者模式(Visitor Pattern)
  6. Salesforce LWC学习(二) helloWorld程序在VSCode中的实现
  7. 100天搞定机器学习|Day1数据预处理
  8. HTTP 学习笔记02
  9. 字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?---这应该讲的最容易懂的文章了!
  10. JavaScript-浏览器的三种弹窗方式