Foundation框架集合 ---- NSArray和NSMutableArray
(1).NSArray :OC中使用的数组,是面向对象,并且是不可变数组。
1.1OC数组不能存放nil值,只能存放OC对象、不能存放非OC对象类型,比如int、strcut、enum等;
1.2 C数组 【缺点 : 数据的类型必须相同】
int a = 3;
int number[5] = {0,1,2,3,4};
1.3 OC数组的创建 【保存的对象可以是不同的对象,但只能保存对象,需要转换成对象才能加入数组】
NSArray *array = [NSArray array]; // 1.这个数组永远是个空数组
NSArray *array1 = [NSArray arrayWithObject:@"lh"]; // 2.这个数组只有一个元素,并且永远只有一个元素
NSArray *array2 = [NSArray arrayWithObjects:@"lh",@"r3",nil]; //3.多个数组实例化方式,以nil结尾,nil是数组元素结束的标记
NSArray *array3 = @[@"lh" , @"yg" , @"wy" , @"123"]; //快速创建一个NSArray对象
1.4 对象方法[array count] ; 获取数组的长度(元素的个数)
例子 : NSLog(@"%ld" , array3.count] ; // 4
[array objectAtIndex 1] ; 传入数组角标的id得到数据对象,使用索引访问。
例子 : NSLog(@"%@", [array3 objectAtIndex:1]; // yg
[array indexOfObject:obj] ; // for in 遍历
[arrayWithObjects:..] ; 向数组对象初始化赋值,这里可以写任意对象的指针,结尾必须使用nil
1.5 NSArray的遍历
1.5.1 for循环遍历
Person *p = [[Person alloc] init]; // 创建一个Person类的对象
NSArray *array = @[p , @"hangda" , @"IOS"]; // 实例化数组
NSUInterger count = [array count];
for(int i = 0 ; i < count; i++){
NSLog(@"%ld -- %@", i , [array indexAtIndex:i]);
}
1.5.2 for in 遍历
for(id obj in array){ // id 代表着数组中每一个元素对象
NSUInter i = [array indexOfObject:obj];
NSLog(@"%ld - %@",i,obj);
// 提前结束遍历
if(i == 1)
{
break; // 只用于switch 和 循环判断
}
}
1.5.3 block遍历 , 苹果官方推荐使用,效率高
// 每次获取到一个对象元素,就会调用block,并且把当前的元素和索引位置当作参数传递给block
[arrry enumerateObjectsUsingBlock :
^ (id obj , NUInteger idx , BOOL *stop)
{
NSLog(@"%ld - %@ , idx , obj");
if (idx == 0)
{
// 停止遍历
*stop = YES ; // YES == 1 == true
}
}
(2) NSMutableArray 可变数组
2.1 基本使用 (NSMutableArray继承自NSArray , 几乎拥有NSArray的一切方法)
创建可变数组 NSMutableArray *array = [NSMutableArray array] ; // 可变
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"lh", @"wy" , nil];
添加元素 // 添加Person类对象元素
[array1 addObjct:[[Person alloc] init ];
// 添加一个字符串对象元素
[array1 addOject:@"yanggang"];
// OC数组添加元素不能为nill(空值)
删除元素 //删除所有元素
[array removeAllObjects];
// 删除指定对象
[array removeObject: @"yanggang"];
// 根据所有删除指定元素
[array removeObjectAtIndex: 0];