NSArray
一 oc的数组可以存储不同类型的对象。。java/c/c++ 则不可以。。
oc只能存储对象 内存空间是连续的。。只保存对象的指针 占得空间也比较小。
二 初始化
NSArray *array1 =[[ NSArray alloc] initWithObjects:@"1",@"2",@"3",nil];
三 方法
1 数组的长度 count
int arrayCount = (int)array1.count;
2 是否包含对象 (BOOL) containsObject:
3 得到最后一个对象 lastObject
4 得到第一个对象 firstObject
5 取出指定的对象 objectAtIndex:
6 打印元素对应的下表 (元素不存在打印-1)indexOfObject:
四 数组的遍历
1 for循环
2 for in 快速枚举
3 枚举器(迭代器)
for(int i =0; i<array1.count.i++){ NSString *str = [str objectAtIndex:i]; }
//如果使用快速枚举,则数组要保持类型一样 for(NSString *str in array1){ }
NSEnumerator *enumerator = [array objectEnumerator]; id obj = nil; while(obj = [enumerator nextObject]){ NSLog(@"obj=%@",obj); }
#pragma mark 普通遍历 void arrayFor1(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; int count = array.count; for(int i=0; i<count; i++){ id obj = [array objectAtIndex:i]; NSLog(@"%i-%@",i, obj); } } #pragma mark 快速遍历 void arrayFor2(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; int count = array.count; int i=0; for(id obj in array){ NSLog(@"%i-%@",i, obj); i++; } } #pragma mark 利用block遍历 void arrayFor3(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%zi->%@",idx, obj); // *stop = YES; //改变外边的Bool,终止遍历 }]; } #pragma mark 利用迭代器 void arrayFor4(){ NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil]; NSEnumerator *enumerator = [array objectEnumerator]; //如果放到遍历之后,则取到空,原因是,遍历完了,就没值了 NSArray *array2 = [enumerator allObjects]; NSLog(@"array2:%@", array2); //获取下一个需要遍历的元素 id obj = nil; while (obj = [enumerator nextObject]) { NSLog(@"obj=%@", obj); }