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

containsObject 总是不含有,你会用吗的更多相关文章

  1. ios开发中一些常用API总结

    转载于:http://www.cnblogs.com/zhucunliang/archive/2013/11/09/3416039.html //1.init初始化 NSString * str1 = ...

  2. 一些API的用法

    //1.init初始化 NSString * str1 = [[NSString alloc] init]; NSLog(@"str1 = %@",str1); //2.initW ...

  3. maven 打包含有第三方依赖的 jar 包

    maven 打包含有第三方依赖的 jar 包:mvn assembly:assembly

  4. Maven打包含有Main方法jar并运行

    最近使用Kettle做定时数据抽取,因为Job更新或需求变更,修改Bug等种种原因,需要对重跑Job一般是针对每天的数据重跑一次.刚开始的做法是直接在自己的开发机器上重跑,这样速度比较慢,因为这时候你 ...

  5. 怎么统计指定文件夹下含有.xml格式的文件数目

    如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...

  6. WordPress上传含有中文文件出现乱码

    最近打算学习安装配置WordPress,当然同时也在学习PHP+MySQL,希望以后能做一些关于WordPress定制和二次开发,包括主题和插件.在成功安装WordPress3.5中文版之后,就测试了 ...

  7. [ jquery 过滤器 hasClass(class) ] 此方法用于在选择器的基础之上检查当前的元素是否含有某个特定的类,如果有,则返回true

    此方法用于在选择器的基础之上检查当前的元素是否含有某个特定的类,如果有,则返回true 实例: <!DOCTYPE html> <html lang='zh-cn'> < ...

  8. 【转】Java中try catch finally语句中含有return语句的执行情况(总结版)

    Java中try catch finally语句中含有return语句的执行情况(总结版) 有一点可以肯定,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有r ...

  9. iOS 判断纯汉字,还是是否含有汉字

    参考:http://www.jianshu.com/p/18cc511b5828 在一些特定的情况下,我们需要判断字符串是否为纯汉字,还是只是含有汉字的情况.我把它写成了一个分类,方便大家使用 NSS ...

随机推荐

  1. java集合框架collection(3)Set、List和Map

    Set.List和Map是java collection中最常用的三种数据结构. Set是集合,不允许有重复的元素,List是动态数组实现的列表,有序可重复,Map是key-value的键值对,用于快 ...

  2. 高并发 Nginx+Lua OpenResty系列(8)——Lua模版渲染

    模版渲染 动态web网页开发是Web开发中一个常见的场景,比如像京东商品详情页,其页面逻辑是非常复杂的,需要使用模板技术来实现.而Lua中也有许多模板引擎,如目前京东在使用的lua-resty-tem ...

  3. http-post调用接口简单代码

    一.简单便捷的httpget调用接口,并且返回接口数据1.导入相应的jar包: 2.代码如下: HttpPost post = null; try { HttpClient httpClient = ...

  4. Hive 学习之路(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件emp.txt和dept.txt可以从本仓库的resources目录下载. 1.1 员工表 -- 建表语句 CREAT ...

  5. 中转Webshell 绕过安全狗(一)

    前言 听说中国菜刀里有后门.抓包我是没有监测到异常数据包.为了以防万一,且更好使用中国菜刀硬杠安全狗.笔者收集了一下资料.无耻的copy大佬的源码,只是在大佬的基础上简单修改了一下,达到Webshel ...

  6. 导入lxml找不到etree,报ImportError:DLL load failed:找不到指定的程序

    1.是pip install lxml后,安装好了lmx-3.8.0,然后执行sacpy的scrapy crawl jobbole命令报导入lxml的etree无法导入,找不到指定的程序 2.这是因为 ...

  7. HashMap原理(一) 概念和底层架构

    HashMap在Java开发中使用的非常频繁,可以说仅次于String,可以和ArrayList并驾齐驱,准备用几个章节来梳理一下HashMap.我们还是从定义一个HashMap开始. HashMap ...

  8. Linux文件查看及重定向

    Linux文件查看及重定向   实验目标: 通过本实验掌握head.tail.cat.more.less等文件查看命令的使用,理解重定向的概念,掌握两种重定向方法的使用. 实验步骤: 1.通过head ...

  9. 风险:隐蔽权限修改导致rgw服务中断

    上午正在开会,突然收到rgw服务异常的告警(503 Service Unavailable),立马停下来处理告警,避免影响到用户~   我们的rgw frontend用的是apache,之前也遇到过5 ...

  10. 第一个SpringBoot

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我 ...