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