關(guān)于EnumerateObjectsUsingBlock和for-in之間的較量

站在巨人的肩膀上,從前輩那里拿來的經(jīng)驗(yàn)。

結(jié)論1:當(dāng)只是遍歷NSArray的時(shí)候使用For-in會(huì)比較快速, 推薦使用For-in遍歷數(shù)組.

結(jié)論2:當(dāng)我們想遍歷NSDictionary的時(shí)候, 推薦使用enumerateKeysAndObjectsUsingBlock

不僅僅是因?yàn)樗俣瓤? 更是因?yàn)榇a更優(yōu)雅和直觀.

使用block同時(shí)遍歷字典key,value

block版本的字典遍歷可以同時(shí)取key和value(forin只能取key再手動(dòng)取value),如:

NSDictionary?*dict?=?@{@"a":?@"1",?@"b":?@"2"};

[dict?enumerateKeysAndObjectsUsingBlock:^(id?key,?id?obj,?BOOL?*stop)?{

NSLog(@"key:?%@,?value:?%@",?key,?obj);

}];

對(duì)于耗時(shí)且順序無關(guān)的遍歷,使用并發(fā)版本

[dict enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id key,id obj,BOOL *stop) {

NSLog(@"key:%@-----value:%@----",key,obj);

}];

對(duì)于數(shù)組

NSArray*array =@[@"1",@"2",@"3",@"4",@"5"];

[array

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

NSLog(@"1:%@----%d",obj,(int)idx);

}];

//并發(fā)遍歷(與CPU的核數(shù)有關(guān))

[array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id obj,NSUInteger idx,BOOL * stop) {

NSLog(@"2:%@----%d",obj,(int)idx);

}];

//倒序遍歷

for(NSString *string in [array reverseObjectEnumerator]) {

NSLog(@"12:%@----",string);

}

//倒序遍歷

[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj,NSUInteger idx,BOOL* stop) {

NSLog(@"13:%@----%d",obj,(int)idx);

}];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容