数组:OC中容器类的一种,分为可变数组NSMUtableArray和不可变NSArray数组。NSMutableArray继承于NSArray,它们构成了OC的数组。
1、数组存放oc中任意对象类型
2、存放到数组中的对象是有顺序的,并且每个对象都有唯一的标识符,索引值。索引值从0开始,是无符整型,无符即没有负数。NSUInteger
一、NSArray 对象只能被查看不能增删改
1、NSArray的创建
NSArray *array = [[NSArray alloc] initWithObjects:@"AA",@"BB",@"CC",@"Helloworld", nil];
NSArray * array1 = [NSArrayarrayWithObjects:@"1",@"2",@"3",@"4", nil];
//用对象初始化
//oc的数组不是真正的数组,是一个链表,nil的作用表示结尾。
2、NSArray的遍历打印
在C语言中,打印一个数组,需要for循环输出,在OC中我们直接 NSLog(@"%@",array);就可以输出数组中所有的对象。
(
AA,
BB,
CC,
"Hello world"
)
//打印出来自动加花括号,表明输出的是一个数组,多个单词会加双引号
当然也可以用C语言的方式给它遍历输出
for(int i = 0; i
NSString *str = [arrayobjectAtIndex:i];//使用i的值作为索引值
NSLog(@"'%@",str);
}
3、根据索引值查看数组中的对象 从数组中去一个元素时要retain,因为数组可能是可变的,其他时候可能执行了delete等操作,使该对象无法引用,使用完时,同样要release。
NSArray* arr =[[array objectAtIndex:1]retain];
NSLog(@"%@",arr);
//取数组中索引值为1的对象
4、根据对象查看索引值(这个我至今没有用到)
NSUInteger *value = [arrayindexOfObject:@"AA"];
NSLog(@"%ld",value);
5、遍历的作用(别的博客看到现在摘录过来 )
(1)枚举器法
NSEnumerator * enumerator = [arrayObjectEnumerator];//数组对象创建一个枚举器id obj;//创建一个id类型的对象while(obj=[enumerator nextObject]) {NSLog(@"%@",obj);
}
枚举器法可以实现逆序遍历,这是快速枚举法不可替代的。
NSEnumerator * enumerator = [arrayreverseObjectEnumerator];除了创建枚举器,别的地方都与正序无区别。
(2)快速枚举法(数组的快速遍历)相比枚举器法的遍历 这种方式更加简洁
for(id obj in array){
NSLog(@"%@",obj
);//循环的第一次,obj是结点0的地址,第二次是结点1的地址。
二、NSMutableArray 不可变数组,使用率比NSArray高。
创建创建时可以添加对象,也可以不加。
NSMutableArray *arr =[[NSMutableArray alloc] init];
NSMutableArray *arr1 =[NSMutableArray alloc]initWithObjects:@"",@"", nil];
1 增
(1)add [arr addObject:@"Tom"];//追加
(2)insert [arrinsertObject:@"卡特琳娜"atIndex:1];//在索引值位置插入对象
2 改
[arr replaceObjectAtIndex:3 withObject:@""];//替换
[arr exchangeObjectAtIndex:0 withObjectAtIndex:3];//根据索引值 将两个对象的位置交换
3 删
[arr removeAllObjects];全删
[arr removeLastObject];删除最后一个
[arr removeObject:@""];//删除具体的对象
[arr removeObjectAtIndex:1];根据索引值删除(删除索引值位置的对象)
4 查和不可变数组一样
最后注意点:
1、如果是全局变量,在下面一定能够要初始化初始化而且用alloc,因为要内存管理起来比较方便。
2、数组取名,不要太像,否则智能提示,一不小心写成一样的,那真真是崩溃啊。