Objective-C遍历数据的几种方式

来源:互联网 发布:便携工具 知乎 编辑:程序博客网 时间:2024/05/01 16:32

遍历的几种方式:
1、通过索引,如通过数组下标来遍历数组 -objectAtIndex()
2、使用NSEnumerator容器来存放数据项,通过nextObject来获取下一个数据
3、使用快速枚举(os x10.5以后)
4、最新的代码块方法(os x 10.5以后)

第一种通过下标的方式来遍历数据,这种方式太简单,这里不显示示例代码
第二种示例代码:
查找用户目录下所有的.jpg文件:

//使用NSEnumeratorvoid 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的遍历数据的几种方式,写下来是为了以后能更好的回顾,如有错误,望大家指正。

1 0
原创粉丝点击