NSArray与NSMutableArray

转载 2015年07月08日 21:08:01

NSArray与NSMutableArray 数组与可变数组的创建和遍历 复习

 

1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组。


2.NSArray的创建


NSArray * array = [[NSArray alloc]initWithObjects:@"one",@"two",@"three",@"four good",nil];
//用对象初始化一个数组,这里是任意四个对象,不一定是字符串。
//OC中的数组,不是真正的数组,这是一个链表,nil的作用正是表明结尾。


3.NSArray的遍历打印


   我们在C语言中,要打印一个数组,要使用循环进行输出,但是在OC中我  们完全可以直接打印,而不通过循环。
NSLog(@“%@”,array);//这里可以直接打印出数组的内容,如果打印的字符串超过一个单词,在输 出时会加双引号。输出如下:

 

{
one,
two,
three,
"four good"
}//OC自加花括号,来表明这是打印一个数组。

 


4.以一个数组初始化另外一个数组


NSArray * array2= [[NSArray alloc]initWithArray:array1];
//利用数组2 来初始化数组1,数组1中的元素与2 相同
//数组的每个元素是任意对象ID类型,因为数组实际上是一链表,所以不   要求数组的每个元素类型完全相同。


5.与NSString相同,alloc init 版本对应着一个arrayWithObjects版本
NSArray * array1 = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];


6.OC中可以使用一个数组的范围内的元素生成另外一个数组,如下:
NSArray * array1 = [array objectsAtIndexes [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)]];
//集合的元素是从1开始 3个元素,红字部分函数返回一个数字集合的对象,集合元素是1,2,3,


6.查找数组的某个节点
    从数组中去一个元素时要retain,因为数组可能是可变的,其他时候可能执行了delete等操作,使该对象无法引用,使用完时,同样要release。
NSArray * str =[[array objectAtIndex:1]retain];
//取数组位置为1的字符串


7.遍历的牛逼作用


(1)枚举器法(传入类的对象作为数组的元素)
NSEnumerator * enumerator = [array ObjectEnumerator];//数组对象创建一个枚举器
id obj;//创建一个id类型的对象
while (obj=[enumerator nextObject]) {
NSLog(@"%@",obj);}

//循环的第一次,nextObject函数返回数组的元素0,第二次返回1,以此类推。
枚举器法可以实现逆序遍历,这是快速枚举法不可替代的。
NSEnumerator * enumerator = [array reverseObjectEnumerator];
除了创建枚举器,别的地方都与正序无区别。


(2)快速枚举法
相比枚举器法,快速枚举法显得更加简洁
for(id obj in array)
{
NSLog(@"%@",obj);
}//循环的第一次,obj是结点0的地址,第二次是结点1的地址。


8.NSMutableArray 可变数组,数组元素是可变的,类似NSMUtableString。因为其可变性,所以可以对各节进行操作。
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"one",@"two",@"three",nil];
//数组的声明同普通数组类似,但是我们可以对数组,进行添加结点,删除 结点等操作。


8.添加结点
[array addObject:@"four"];//添加结点非常简单,没有字符串的各种区分


9.删除结点
[array removeObjectAtIndex:1];//根据指数,删掉的是@”two”
[array removeObject:@”Four”];//根据某个结点的地址,删除对应的结点
[array removeObject:[array objectAtIndex:0] inRange:NSMakeRange(1, 4)];
//在某个范围内(1,4),删除与地址0位置相同地址的结点
[array removeObject:@”one” inRange:NSMakeRange(2, 3)];
//从2开始3个节点内,如果有地址和@”one”相同的结点,删除
//在(2.3)范围内,查找@”one”并删除
后两个函数作用相同,只是写法不同而已。


10.NSString的分割
将字符串分割,然后将分割后的字符串一次存入一个动态数组中。类似C语 言中的strtok。
NSString * str = @"I am a so bad man.";
NSArray * array = [str componentsSeparatedByString:@" "];
//以空格为标准进行字符串分割,操作后,原字符串不变,只是生成了一堆 字符串,装在一个数组中,达到分割的目的。
 Strtok()有一强大的作用,是这个函数不能比拟的,strtok(p," ,")此时可以分 别以空格和","来进行字符串分割,以上函数就不能达到这个作用。我们需要字符合集来解决这问题。
NSArray *array = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" ,"]];
//红字部分是创造一字符串集合,以字符串集合为参数进行分割


11.字符串拼接
将字符串分割,同样可以将分割后的字符串重新拼接
NSString * str2 = [array componentsJoinedByString : @” ”];
//把数组中的字符串拼接在一起,中间空格隔开,形成新的字符串str2


12.字符串交换
[array exchangeObjectAtIndex:0 WithObjectAtIndex:array.count-1];
//交换两个位置的结点,array.count-1 意思是最后一个结点


14.数组排序
[array sortUsingSelector:@selector (oldThanDog:)];
//oldThanDog这个函数为BOOL型函数,实际上是返回YES或者NO来控   制排序。
//这个函数可以排序,但是不知道排序的准则,这里的BOOL型函数实际上 是自写的函数,通过返回值规定排序的原则。


14.seletor 选择器
SEL型变量实际上可以看做一函数指针。
我们可以将函数,抽象成SEL变量来满足我们的需求。
在编写代码的时候,不能确定某一部分引用哪个函数的时候,我们可以引用 SEL型变量[dog performselector:sel] 来调用函数,这里的sel是对某函数抽象化SEL的结果。
对于带参的SEL,我们这样处理。
[str performSelector :sel withObject:str2 ];
//红字部分,就是函数带参SEl类型的处理方式

关于NSMutableArray线程安全的思考和实现

NSMutableArray是线程不安全的,当有多个线程同时对数组进行操作的时候可能导致崩溃或数据错误,下面是我对线程安全的几个思路,希望由此能给你带来一些思路,如果有错误的地方还希望大家能够指出 ...
  • kongdeqin
  • kongdeqin
  • 2016年11月17日 16:32
  • 2975

NSArray和NSMutableArray的介绍和用法

一、NSArray 1、C语言中的数组1)回顾C语言中的数组使用方法 int a[5]={1,2}; int *pa[3];2、NSArray的基本介绍1)什么是NSArray? NSArray是O...
  • u013136306
  • u013136306
  • 2015年11月10日 11:05
  • 239

黑马训练营---NSArray,NSMutableArray

1.介绍 NSArray:是一个不可变数组。 使用过程注意:不能存放非oc类型,如int,double,enum。 NSMutableArray:NSArray的字类,数组可变。 2....
  • loveudsb
  • loveudsb
  • 2015年01月26日 11:04
  • 185

iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输

将NSArray、NSDictionary转换为JSON格式进行网络传输,是经常用到的,但是iOS没有提供方便的方法库。我们模拟一个实例,假设我们需要把一个自定义的一个模型(只有若干属性的Class)...
  • worldzhy
  • worldzhy
  • 2015年11月22日 23:12
  • 14075

NSArray和NSMutableArray的创建及常用方法

#import int main(int argc, const char * argv[]) {     @autoreleasepool { #pragma mark 创建N...
  • AirDrop
  • AirDrop
  • 2015年09月16日 10:47
  • 190

NSArray和NSMutableArray常用方法总结

不可变数组对象: [array count] : 得到这个对象数组的长度。 [array objectAtIndex 0]: 传入数组脚标的id 得到数据对象。 [arrayWi...
  • xueweichao_1989
  • xueweichao_1989
  • 2014年09月21日 14:56
  • 139

黑马程序员 --- NSArray和NSMutableArray的用法

NSArray和NSMutableArray的用法 NSArray是oc中的数组类,开发中建议使用NSArray替代C语言中的数组。 C语言中数组和OC下的NSArray的不同之处有如下: 1....
  • u013644868
  • u013644868
  • 2015年08月30日 12:31
  • 288

黑马程序员——NSArray和NSMutableArray的使用

NSArray和NSMutableArray的使用 1.NSArry不可变数组 用来存储对象的有序列表(任意类型的对象) 限制: 只能存储Objective—C 的对象, 不能存储C 语言的基本...
  • perhaps1004
  • perhaps1004
  • 2015年01月16日 17:41
  • 217

NSMutableArray (可变数组增、删、改、查)

//1.1 初始化 NSMutableArray *muArray = [NSMutableArray arrayWithObjects:@"123",@"345",@"2354", nil]...
  • Jason_chen13
  • Jason_chen13
  • 2015年12月08日 17:58
  • 2022

关于NSMutableArray 删除元素的问题小结

在项目中遇到了一个问题,是将一个可变字典中的某些字符串进行删除操作,当时我的第一反应是采用forin 遍历,可能是觉得forin的遍历速度比较快吧,额,扯远了,回到遇到的问题中,当我用forin进行遍...
  • MingerW
  • MingerW
  • 2016年04月21日 14:26
  • 7469
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NSArray与NSMutableArray
举报原因:
原因补充:

(最多只允许输入30个字)