EnumerateObjectsUsingBlock

最近在github上查看老外的代碼時,發(fā)現(xiàn)老外遍歷時都愛用

-(void)enumerateObjectsUsingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block

這個方法,查閱資料得知遍歷字典和量大的數(shù)組和遍歷字典時性能比 for in 好,且代碼更加優(yōu)雅;對于單個數(shù)組使用for in 新能更好

遍歷字典時

Block版本的字典遍歷可以同時取key和value而for in只能取key再手動取value

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

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

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

}];

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

-(void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block

NSDictionary *dict = @{@"a": @"1", @"b": @"2"};
[dict enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id key,id obj,BOOL *stop) {

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

}];

遍歷數(shù)組時

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

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

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

}];

并發(fā)遍歷數(shù)組

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

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

}];

倒序遍歷數(shù)組

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)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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