最近在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);
}];