———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
二:NSArray/NSMutableArray
NSArray :不可变数组
NSMutableArray : 可变数组
OC数组不能存放nil值
OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
NSArray *array = [NSArray array]; //NSArray是不可变数组,创建的时候没有说明元素,所以这个array永远是空数组
1.NSArray的创建
1.NSArray的创建
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// nil是数组元素结束的标记,所以数组不能存放nil
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2 count];
//NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"];
2.NSArray的元素个数:
[arrary2 count]; //get方法
NSLog(@"%ld", array3.count);// 用点语法
3.NSArray中元素的访问
NSLog(@"%@", [array3 objectAtIndex:1]);//这种方法很麻烦
//array3[1];
NSLog(@"%@", array3[0]);// 利用数组名加数组下标
遍历:
第一种方式:for循环
Person *p = [[Person alloc] init];
NSArray *array = @[p, @"rose", @"jack"];
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@", array[i]);
}// 打印结果是:<Person :内存地址>,Rose,Jack 因为打印Person对象默认的就是<类名:内存地址>
第二种方式:快速遍历
id obj代表着数组中的每一个元素
int i = 0;
for (id obj in array)
{
// 找出obj元素在数组中的位置
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld - %@", i, obj);
//i++; //可以在外面定义i=0,然后在这里i++
if (i==1) //如果想要退出循环,那么可以自定义,遍历到那个位置时退出
{
break;
}
第三种方式:用block遍历
[array enumerateObjectsUsingBlock:
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
// 如果想要退出遍历
if (idx == 0)
{
// 停止遍历
*stop = YES;
}
}];
block遍历的本质:
void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
if (idx == 0)
{
*stop = YES; // 停止遍历
}
};
for (int i = 0; i<array.count; i++)
{
// 用来标记是否需要停止遍历
BOOL isStop = NO;
// 取出元素
id obj = array[i];
myblock(obj, i, &isStop);
if (isStop)
{
break;
}
}
NSMUtableArray 可变数组
是NSArray的子类,所以NSArray的方法,NSMUtableArray都可以用。
NAMUtableArray的创建方式:
1.NSMutableArray *array = [NSMutableArray array]; //用array方法创建了一个空的数组 array
// 向数组array中添加元素
[array addObject:[[Person alloc] init]]; // 添加一个Person对象
[array addObject:@"jack"]; // 添加一个字符串"jack"
此时,数组中有两个元素
注意:不能够添加基本数据类型
//也可以一开始就定义一些元素
2.NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
删除元素
array removeAllObjects]; // 删除所有元素
[array removeObject:@"jack"]; // 删除指定对象
[array removeObjectAtIndex:0]; // 删除指定位置的元素
注意:
@[ ] 返回的是NSArray对象,只创建不可变数组NSArray,不可以创建可变数组NSMutableArray
错误写法:
NSMutableArray *array = @[@"jack", @"rose"];
[array addObject:@"jim"]; //报错,不能识别的消息发送给了某个对象