EnumerateObjectsUsingBlock

1880 단어
최근에 github에서 외국인의 코드를 보았을 때, 외국인이 두루 돌아다닐 때 모두 즐겨 쓰는 것을 발견하였다
-(void)enumerateObjectsUsingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
이 방법은 자료를 찾아보면 사전과 양이 많은 수조와 사전을 훑어볼 때 for in보다 성능이 좋고 코드가 더욱 우아하다는 것을 알 수 있다.단일 그룹에 for in을 사용하면 더 좋습니다

사전을 두루 돌아다닐 때


Block 버전의 사전은 키와value를 동시에 찾을 수 있고 for in은 키만 찾을 수 있으며 수동으로value를 찾을 수 있습니다
NSDictionary *dict = @{@"a": @"1", @"b": @"2"};

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

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

}];


시간 소모 및 순서와 무관한 스트리밍에 병렬 버전의 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);

}];

배열을 반복할 때

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

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

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

}];

병렬 스트리밍 그룹
[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);

}];

좋은 웹페이지 즐겨찾기