iOS开发之oc(十八)--Foundation(3)NSArray和NSMutableArray
(一)首先来看一个知识点
/*
集合类:是拿来装对象的(有以下三种)
1.NSArray\NSMutableArray
•有序
•快速创建(不可变):@[obj1, obj2, obj3]
•快速访问元素:数组名[i]
2.NSSet\NSMutableSet
•无序
3.NSDictionary\NSMutableDictionary
•无序
•快速创建(不可变):@{key1 : value1, key2 : value2}
•快速访问元素:字典名[key]
*/
(二)
NSArray :不可变数组
NSMutableArray : 可变数组
C语言数组:存放基本数据类型
OC数组:只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
1.不可变数组的创建
void create() { /* int a = 5; int ages[10] = {1, 90, 89, 17}; // C数组 Person *p = [[Person alloc] init]; // OC数组(下面) Person *persons[5] = {p, [[Person alloc] init]}; */ // OC数组不能存放nil值 // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等 // 这个array永远是空数组 // NSArray *array = [NSArray array]; /* 1.NSArray的创建 */ NSArray *array2 = [NSArray arrayWithObject:@"jack"]; // 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的元素个数 */ NSLog(@"%ld", array3.count); /* 3.NSArray中元素的访问 */ NSLog(@"%@", [array3 objectAtIndex:1]); //array3[1]; NSLog(@"%@", array3[0]); }
2.不可变数组的遍历
// 遍历数组 void use1() { Person *p = [[Person alloc] init]; NSArray *array = @[p, @"rose", @"jack"]; // 方法1(通过下标) // for (int i = 0; i<array.count; i++) // { // NSLog(@"%@", array[i]); // } // 方法2 (for in 结构) --推荐使用 // id obj代表着数组中的每一个元素 //int i = 0; // for (id obj in array) // { // // 找出obj元素在数组中的位置 // NSUInteger i = [array indexOfObject:obj]; // // NSLog(@"%ld - %@", i, obj); // //i++; // // if (i==1) // { // break; // } // } // 方法3:Block --推荐使用 // 每遍历到一个元素,就会调用一次block // 并且当前元素和索引位置当做参数传给block [array enumerateObjectsUsingBlock: ^(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; // } // } }
3.不可变数组的使用
void use2() { NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil]; // 添加元素 [array addObject:[[Person alloc] init]]; [array addObject:@"jack"]; // 删除元素 //[array removeAllObjects]; // 删除指定的对象 // [array removeObject:@"jack"]; [array removeObjectAtIndex:0]; // 错误写法 // [array addObject:nil]; NSLog(@"%@", array); NSLog(@"%ld", array.count); }
4.可变数组
NSMutableArray它的使用基本和不可变数组类似----具体参照文档,那里面的很多方法,文档的说明才是王道。
注意:
int main() { // @[] 只创建不可变数组NSArray /* 错误写法 NSMutableArray *array = @[@"jack", @"rose"]; [array addObject:@"jim"]; */ // NSArray *array = @[@"jack", @"rose"]; return 0; }