ios 遍歷陣列的八種方法

weixin_34402408發表於2016-11-03

//第一種

[arr enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop){

NSLog(@"%ld,%@",idx,[arr objectAtIndex:idx]);

}];

//第二種

dispatch_apply([arr count], dispatch_get_global_queue(0, 0), ^(size_t index){//並行

NSLog(@"%ld,%@",index,[arr objectAtIndex:index]);

});

//第三種

dispatch_apply([arr count], dispatch_get_main_queue(), ^(size_t index){//序列,容易引起主執行緒堵塞,可以另外開闢執行緒

NSLog(@"%ld,%@",index,[arr objectAtIndex:index]);

});

//第四種

for (NSString*str in arr) {

NSLog(@"%@",str);

}

//第五種,do-while

int i = 0;

do {

NSLog(@"%@",[arr objectAtIndex:i]);

i++;

} while (i<[arr count]);

//第六種,while-do

int j = 0;

while (j<[arr count]) {

NSLog(@"%@",[arr objectAtIndex:j]);

j++;

}

//第七種,普通for迴圈

for (int m = 0; m<[arr count]; m++) {

NSLog(@"%@",[arr objectAtIndex:m]);

}

//第八種,NSEnumerator  (謝謝大劉124585858的補充)

提供正反向遍歷

- (nullable ObjectType)nextObject;

@property (readonly,copy) NSArray *allObjects;

NSArray *iosArray = @[ @"I", @"O", @"S"];

NSEnumerator *enumerator = [iosArray objectEnumerator];//正向遍歷

NSEnumerator *enumerator = [iosArray reverseObjectEnumerator];//反向遍歷

id object;

while ((object = [enumerator nextObject]) != nil) {

//處理列舉器中的資料

NSLog(@"%@", object);

}

個人比較喜歡第一種方法

注意:

① 其中第二種方法由於是並行,所以列印出來的東西是隨機的,並不是按照順序列印的

② 第三種容易引起主執行緒堵塞,所以最好自己另外建立一個執行緒

③ 本人學識淺,目前所知的就這幾種,歡迎補充

相關文章