NSArray的containsObject漏洞
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漏洞的更多相关文章
- iOS性能优化-数组、字典便利时间复杂
上图是几种时间复杂度的关系,性能优化一定程度上是为了降低程序执行效率减低时间复杂度. 如下是几种时间复杂度的实例: O(1) return array[index] == value; 复制代码 O( ...
- iOS NSArray数组过滤
需求:在一个数组里面,将在这个数组中的并且在另一个数组里面的元素过滤掉. 即:在一个数组dataArray里面,将在dataArray数组中的并且在filteredArray数组里面的元素过滤掉. / ...
- Fouandation(NSString ,NSArray,NSDictionary,NSSet) 中常见的理解错误区
Fouandation 中常见的理解错误区 1.NSString //快速创建(实例和类方法) 存放的地址是 常量区 NSString * string1 = [NSString alloc]init ...
- 一些NSArray,NSDictionary,NSSet相关的算法知识
iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准 ...
- NSArray
版权声明:本文为博主原创文章,未经博主允许不得转载. 数组是一个元素有序.元素可重复的集合,在iOS编程中经常被用到,而Foundation框架提供了数组对象.数组对象包括不可修改的数组对象NSArr ...
- Objective - C NSArray不可变数组和NSMutableArray可变数组
OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见 ...
- Foundation ----->NSArray
.数组的创建 //注意:在OC的数组中,只能够存放对象 // NSArray *array = [NSArray arrayWithObject:12];错误 //创建 ...
- iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)
iOS学习(OC语言)知识点整理 一.OC中的数组 1)数组:也是一个对象,数组中存放的是对象的地址,可以存放任意类型对象的地址,只能是对象不能是具体的数值,数组是有序的, 可以存放重复的元 ...
- objective-c系列-NSArray
OC数组NSArray 对比 c数组 和 oc数组对象(指针) 定义 int array[10]; NS ...
随机推荐
- 总结一下js的原型和原型链
最近学习了js的面向对象编程,原型和原型链这块是个难点,理解的不是很透彻,这里搜集了一些这方面的资料,以备复习所用 一. 原型与构造函数 Js所有的函数都有一个prototype属性,这个属性引用了一 ...
- shell中$(( )) 与 $( ) 还有${ }的区别
http://blog.chinaunix.net/uid-14351756-id-2820651.html $( ) 与 ` ` (反引号)在 bash shell 中,$( ) 与 ` ` (反引 ...
- LeetCode 之 Triangle
Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...
- Oracle数据库初探
一.安装oracle数据库 步骤:转载一个很不错的文档:http://www.linuxidc.com/Linux/2015-02/113222.htm 注意点:安装的时候会check相关依赖,有些可 ...
- hdu1020
#include <stdio.h> int main(void){ int n,i,c; char txt[10001]; scanf("%d", &n); ...
- 做一个视频播放器在没开始播放的时候有一张图片实际上就是拿一张图片盖住视频承载的屏幕当出发。play的时候图片隐藏 img
saxda 某个元素.style.class='';也可以是.className <!DOCTYPE html><html lang="en"><he ...
- Sass与Compress实战:第三章
概要:这一章将介绍Compass如何使Web设计中最基础的部分——布局变得简单. 本章内容: ● 网格布局的基本原理以及何时使用网格布局 ● 使用Compass时的CSS网格布局框架选项 ● 使用排版 ...
- 为什么需要异步?why?来看一段代码。
为什么需要异步?why?来看一段代码. 问题1: for(var i=0;i<100000;i++){ } alert('hello world!!!'); 这段代码的意思是执行100...次后 ...
- git config and options core.bare hard
In Lynda course Building a Web Interface with React.js 003 Using the exercises > git clone --bare ...
- angularjs表单
<form ng-app="myApp" ng-controller="validateCtrl" name="myForm" nov ...