iPhone 开发(十三)Objective-C 中快速枚举的使用

在Mac OX1 0.5中,为了将Objective-C升级到2.0版本,苹果公司对其进行了一系列的小调整,快速枚举就是其中之一,他的语法与脚本语言类似。如下面的代码所示:

   for(NSString *string in array){

     NSLog(@"I found %@",string);

}

这个循环体将会遍历数组中的每个元素,并且用变量string存储每个数组值。

下面通过一段程序来解释:  


遍历寻找磁盘上的jpg文件:


---------第一节

#import <Foundation/Foundation.h>


int main (int argc, constchar * argv[]) {

  //创建一个自动释放池

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    NSFileManager *manager;   //创建一个文件管理器

    manager = [NSFileManager defaultManager];


    NSString *home;     //指定目录,stringByExpandingTildeInPath方法可以接受 ~ 字符并将其展开

    home = [@"~" stringByExpandingTildeInPath];

//创建一个字典迭代器,并将路径字符串传给文件管理器



        NSDirectoryEnumerator *direnum;

    direnum = [manager enumeratorAtPath: home];


    NSMutableArray *files;    //创建一个可变数组,并将匹配的路径添加进去

    files = [NSMutableArray arrayWithCapacity: 42];


    NSString *filename;     

    while (filename = [direnum nextObject]) {

if ([[filename pathExtension] 

 isEqualTo: @"jpg"]) {

[files addObject: filename];

}

    }

//创建一个枚举器,并把files可变数组对象加入,这样可以使用nextObject 方法。目录循环结束后,遍历文件数组,用NSLog()将数组内容输出


    NSEnumerator *filename;

    fileenum = [files objectEnumerator];


    while (filename = [fileenum nextObject]) {

NSLog (@"%@", filename);

    }


    [pool drain];

    return0;

}


------第二节

#import <Foundation/Foundation.h>


int main (int argc, constchar * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    NSFileManager *manager;

    manager = [NSFileManager defaultManager];


    NSString *home;

    home = [@"~" stringByExpandingTildeInPath];


    NSMutableArray *files;

    files = [NSMutableArray arrayWithCapacity: 42];



//这里使用了快速枚举

for (NSString *filename in [manager enumeratorAtPath: home]) {

if ([[filename pathExtension] 

isEqualTo: @"jpg"]) {

[files addObject: filename];

}

}


for (NSString *filename in files) {

NSLog (@"%@", filename);

}


    [pool drain];

    return0;

}

好吧!把不同的拿出来:

        NSDirectoryEnumerator *direnum;

    direnum = [manager enumeratorAtPath: home];

 

     NSString *filename;              


    while (filename = [direnum nextObject]) {

    if ([[filename pathExtension] 

 isEqualTo: @"jpg"]) {

[files addObject: filename];

}

    }


    NSEnumerator *filename;

    fileenum = [files objectEnumerator];


    while (filename = [fileenum   nextObject]) {

NSLog (@"%@", filename);

    }                                   


for (NSString *filename in [manager enumeratorAtPath: home]){

if ([[filename pathExtension] 

isEqualTo: @"jpg"]) {

[files addObject: filename];

}

}


for (NSString *filename in files) {

NSLog (@"%@", filename);

}



分析,左边采用枚举,使用nextObject实例,寻找下个图片路径

这边使用了快速枚举,可以以最快速度遍历



比较两段程序,他们实现的功能是一样的,主要的区别是在后面一段,第二个程序使用了快速枚举。

--------------------------------

内容来源与Learn Objective-C on the Mac

---------------------------------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值