1. 程式人生 > >Objective-C遍歷資料的幾種方式

Objective-C遍歷資料的幾種方式

遍歷的幾種方式:
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的遍歷資料的幾種方式,寫下來是為了以後能更好的回顧,如有錯誤,望大家指正。