Objective - C NSArray不可变数组和NSMutableArray可变数组
Posted on 2016-02-16 21:24 揍揍揍揍揍揍揍小屁孩 阅读(341) 评论(0) 编辑 收藏 举报OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法。
OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型。
不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素。
创建一个不可变数组对象
//1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号)
NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger",@"honghuang",@"taixu",@"zhili", nil]; //nil不是对象,只是一个标志,告诉编译器数组赋值结束
//2.便利构造器
NSArray *array2 = [NSArray arrayWithObjects:@"zhuba",@"bada",@"zhonger",@"duliu", nil];
打印出的数据以()内容显示,比如:
array1 is ( zhonger, honghuang, taixu, zhili )
//3.笑笑语法 语法糖,字面量 这是不可变数组的写法。。。
//OC中的数组可以存放不同类型的对象
NSArray *array3 = @[@"yousiyi", @"huangshenme", @"shuishen", @"qiuxiang", @12];
//数组的两个核心方法 count objectAtIndex:
//count 求数组元素个数
unsigned long count = [array1 count];
NSLog(@"array1count is %lu",count); //可以打印出元素的个数
//objectAtIndex:通过给定的下标,找到相应的元素
NSString *bada = [array2 objectAtIndex:1];
NSLog(@"bada is %@",bada);
NSString *zhonger = array2[2]; //语法糖表达方式
NSLog(@"zhonger is %@",zhonger);
//遍历array3里面的每一个元素
unsigned long count1 = [array3 count];
for (int i = 0; i < count1; i ++) {
NSLog(@"%@",array3[i]);//语法糖
}
//判断数组中是否包含某个元素
BOOL isTrue = [array2 containsObject:@"zhuba"];
NSLog(@"isTrue is %d",isTrue);
//获取某个元素所在的数组下标
NSUInteger index = [array2 indexOfObjectIdenticalTo:@"bada"];
NSLog(@"index is %lu",index);
//通过数组来实现分割字符串,拼接字符串、
//以空格分隔字符串
NSString *str = @"zhonger m 19 m";
NSArray *resultArray = [str componentsSeparatedByString:@" "];
//以66666拼接字符串
NSArray *rArray = @[@"bada", @"qiuxiang",@"zaiyiqi"];
NSString *str1 = [rArray componentsJoinedByString:@"66666"];
//至于可变数组,在不可变数组的情况下,提供了增删改的操作,让数组功能变得更加多样化
//1.创建一个可变数组
NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:0];
//2.便利构造器
NSMutableArray *mArr1 = [NSMutableArray arrayWithCapacity:0];
//3.可变数组的字面量创建方式
NSMutableArray *mArr2 = [@[@"zhonger", @"dada", @"zhuzhu", @"linlin"]mutableCopy];
//往可变数组里添加元素,addobject
[mArr2 addObject:@"addobject"];
//往可变数组的指定位置插入一个新的元素 insertObject
[mArr2 insertObject:@"charu" atIndex:1];
//移除可变数组中的某一元素
//通过下标
[mArr2 removeObjectAtIndex:4];
NSLog(@"mArr2 is %@",mArr2);
//通过指定内容
[mArr2 removeObject:@"zhuzhu"];
NSLog(@"mArr2 is %@",mArr2);
//删除数组中最后一个元素
[mArr2 removeLastObject];
NSLog(@"mArr2 is %@",mArr2);
//删除数组中所有的元素
//[mArr2 removeAllObjects];
//NSLog(@"mArr2 is %@",mArr2);
//替换可变数组中的元素
[mArr2 replaceObjectAtIndex:0 withObject:@"gou"];
[mArr2 replaceObjectAtIndex:1 withObject:@"taixu"];
NSLog(@"mArr2 is %@", mArr2);
//交换可变数组中两个元素的位置
[mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:1];
NSLog(@"mArr2 is %@", mArr2);
注意:无论是不可变还是可变数组,如果是在MRC环境下,只要加入这个数组中,都是导致引用计数加1,作为三大容量之一,数组存放的是有序的对象,不同于字典的有序,数组可以实现排序。