遍历的几种方式:
1、通过索引,如通过数组下标来遍历数组 -objectAtIndex()
2、使用NSEnumerator容器来存放数据项,通过nextObject来获取下一个数据
3、使用快速枚举(os x10.5以后)
4、最新的代码块方法(os x 10.5以后)
第一种通过下标的方式来遍历数据,这种方式太简单,这里不显示示例代码
第二种示例代码:
查找用户目录下所有的.jpg文件:
//使用NSEnumerator
void getFile(){
NSFileManager *manager;
//获取NSFileManager对象,使用默认的Manager
manager = [NSFileManager defaultManager];
NSString *home;
//获取主目录,~代表主目录,stringByExpandingTildeInPath将~替换成当前用户的主目录
home = [@"~" stringByExpandingTildeInPath];
//将路径传入到文件管理器中,得到在当前路径中的所有文件的目录,方便接下来进行比较
NSDirectoryEnumerator *dirnum;
NSMutableArray *files; //用于存放匹配成功的文件名
files = [NSMutableArray arrayWithCapacity: 42];
NSString *filename; //用于临时存放一个当前目录下的一个文件的名字
while(filename = [dirnum nextObject])
{
if([[filename pathExtension] isEqualTo:@"jpeg"]) {
//pathExtension输出文件扩展名
[files addObject:filename]; //匹配成功
}
}
NSEnumerator *fileenum;
fileenum = [files objectEnumerator]; //将获取到匹配的文件名转换成可用于遍历的容器中
while(filename = [fileenum nextObject]) {//进行遍历
NSLog(@"%@",filename);
}
}
第三种使用快速枚举(针对os x10.5以后)
简单示例:
for(NSString *string in array)
{
NSLog(@"I found %@",string);
}
查找用户目录下所有的.jpg文件:
//通过快速枚举方法
void getFile() {
NSFileManager *manager = [NSFileManager defaultManager];
NSString *home;
home = [@"~" stringByExpandingTildeInPath];
NSMutableArray *files;
files = [NSMutableArray arrayWithCapacity:42];
for(NSString *fileName in [manager enumeratorAtPath:home]) {
if([[fileName pathExtension] isEqualToString:@"jpg"]){
[files addObject:fileName];
}
}
for(NSString *fileName in files){
NSLog(@"%@",fileName);
}
}
第四种通过代码块来实现,苹果公司添加了一个能在NSArray中通过代码块枚举对象的方法,代码如下:
-(void)enumerateObjectsUsingBlock:(void (^)(id obj,NSUInteger index,BOOL *stop))block;
我们仿照快速枚举
for(NSString *string in array)
{
NSLog(@"I found %@",string);
}
来重写一下上面的给出的代码块,得到如下代码:
[array enumerateObjectsUsingBlock:^(NSString *string,NSUInteger index,BOOL *stop){
NSLog(@"I found %@",string);
}];
代码块和快速枚举的不同:通过代码块可以让循环操作并发执行,而通过快速枚举执行操作要一项一项的线性完成
以上就是我自己理解的Objective-C的遍历数据的几种方式,写下来是为了以后能更好的回顾,如有错误,望大家指正。