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 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。
最新文章
- coursera机器学习-聚类,降维,主成分分析
- twoSum
- css自定义字体
- 读<;你必须知道的.NET>;IL指令笔记
- Car---hdu5935(简单题)
- C++Primer 第九章
- css hack一览
- 【LeetCode】189 - Rotate Array
- 浅谈管道模型(Pipeline)
- 实现wpf的值转换器
- HDU4046--Panda(树状数组)
- Codeforces Round #449 (Div. 2)-897A.Scarborough Fair(字符替换水题) 897B.Chtholly&#39;s request(处理前一半) 897C.Nephren gives a riddle(递归)
- Python基本知识
- 深入理解C++11【2】
- Hbase存储流程
- Django框架(一)
- hql语句的case when then else end问题
- ng-深度学习-课程笔记-7: 优化算法(Week2)
- ubuntu 14.04/16.04/18.04 yum安装 zabbix-agent 教程
- 发现的好东西——bitset
热门文章
- java中的String、StringBuffer、StringBuilder的区别
- nginx搭建静态网站
- Zookeeper详解-安装(四)
- 【Linux杂记】Linux配置静态IP地址,修改主机名、host
- 【设计模式】行为型09访问者模式(Visitor Pattern)
- Salesforce LWC学习(二) helloWorld程序在VSCode中的实现
- 100天搞定机器学习|Day1数据预处理
- HTTP 学习笔记02
- 字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?---这应该讲的最容易懂的文章了!
- JavaScript-浏览器的三种弹窗方式