1.NSArray中的containsObject的用法

NSMutableArray *array=[NSMutableArray array];

if(![array containsObject:[NSNumber numberWithInt:3]]){//判断数组中是否有3这个元素

[array addObject:[NSNumber numberWithInt:3]];//没有元素的话添加

}

if(![array containsObject:[NSNumber numberWithInt:4]]){//判断数组中是否有4这个元素

[array addObject:[NSNumber numberWithInt:4]];

}

if(![array containsObject:[NSNumber numberWithInt:3]]){

[array addObject:[NSNumber numberWithInt:3]];

}

NSLog(@"%@",array);//3,4

最后一个3没有加进去,containsOjbect是不是挺神奇的,

2.可是我们要用自定义的类呢,你就会发现containsObject不顶用了,这个时候我们必须重写父类的方法

-(BOOL)isEqual:(id)object

为什么呢,因为containsOjbect是按地址进行判断的,比如我们建一个Person类,添加一个name属性

-(BOOL)isEqual:(id)object{

if(self==object){

return YES;

}

Person *p=(Person *)object;

if([self.name isEqualToString:p.name]){

return YES;

}

return NO;

}

这样数组里有的话就不会被重复添加了

NSArray的containsObject漏洞的更多相关文章

  1. iOS性能优化-数组、字典便利时间复杂

    上图是几种时间复杂度的关系,性能优化一定程度上是为了降低程序执行效率减低时间复杂度. 如下是几种时间复杂度的实例: O(1) return array[index] == value; 复制代码 O( ...

  2. iOS NSArray数组过滤

    需求:在一个数组里面,将在这个数组中的并且在另一个数组里面的元素过滤掉. 即:在一个数组dataArray里面,将在dataArray数组中的并且在filteredArray数组里面的元素过滤掉. / ...

  3. Fouandation(NSString ,NSArray,NSDictionary,NSSet) 中常见的理解错误区

    Fouandation 中常见的理解错误区 1.NSString //快速创建(实例和类方法) 存放的地址是 常量区 NSString * string1 = [NSString alloc]init ...

  4. 一些NSArray,NSDictionary,NSSet相关的算法知识

    iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准 ...

  5. NSArray

    版权声明:本文为博主原创文章,未经博主允许不得转载. 数组是一个元素有序.元素可重复的集合,在iOS编程中经常被用到,而Foundation框架提供了数组对象.数组对象包括不可修改的数组对象NSArr ...

  6. Objective - C NSArray不可变数组和NSMutableArray可变数组

    OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见 ...

  7. Foundation ----->NSArray

    .数组的创建     //注意:在OC的数组中,只能够存放对象 //    NSArray *array = [NSArray arrayWithObject:12];错误          //创建 ...

  8. iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)

    iOS学习(OC语言)知识点整理 一.OC中的数组 1)数组:也是一个对象,数组中存放的是对象的地址,可以存放任意类型对象的地址,只能是对象不能是具体的数值,数组是有序的,      可以存放重复的元 ...

  9. objective-c系列-NSArray

    OC数组NSArray 对比         c数组              和       oc数组对象(指针) 定义         int array[10];              NS ...

随机推荐

  1. python密码强口令检测

    主要就是输入判断检测,以及一些正则的学习.刚开始玩python项目,代码写的不好.我以前玩C的!! 代码的价值与其是否能够实现功能等价! #密码输入检测 密码长度不少于8个字符,而且必须包含大写/小写 ...

  2. 寻找中位数v1.0

    题目内容: 编写一个函数返回三个整数中的中间数.函数原型为: int mid(int a, int b, int c); 函数功能是返回a,b,c三数中大小位于中间的那个数. 输入格式: " ...

  3. CodeForces 698B Fix a Tree

    并查集,构造. 先看一下图的特殊性,按照这种输入方式,一个点的入度最多只有$1$,因此,问题不会特别复杂,画画图就能知道了. 如果给出的序列中已经存在$a[i]=i$,那么随便取一个$a[i]=i$的 ...

  4. HDU 5860 Death Sequence

    用线段树可以算出序列.然后o(1)询问. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<c ...

  5. virtualbox 提示 vboxclient the virtualbox kernel service is not running

    更新完Guest的内核之后,Guest下提示" vboxclient the virtualbox kernel service is not running".Guest下执行: ...

  6. Java 集合 JDK1.7的LinkedList

    Java 集合 JDK1.7的LinkedList @author ixenos LinkedList LinkedList是List接口的双向链表实现,JDK1.7以前是双向循环链表,以后是双向非循 ...

  7. 2、使用Struts2实现登录功能(没有连接数据)

    1.创建如下的目录结构 2.在com.entity包下创建 package com.entity; /** * 用户类 * @author Holly老师 * */ public class User ...

  8. 2DToolkit官方文档中文版打地鼠教程

    初始设置 创建一个Unity项目,并导入2D Toolkit插件. 导入完成后,在Project窗口会显示TK2DROOT文件夹(后续版本文件夹名称或许会有变动). 导入素材游戏,你可以从这里下载.下 ...

  9. Java comparable 和 comparator

    一.comparator 接口继承 public class ComparatorTest { /** * @param args */ public static void main(String[ ...

  10. 倒叙筛除list

    for(int i=list.Count-1;i>=0;i--) {    if(list[i])   {     list.RemoveAt(i);   } }