반응형
enumerateObjectsUsingBlock : 사용되는 BOOL * stop 인수는 무엇입니까?
나는 enumerateObjectsUsingBlock:
최근에 열거 요구 사항을 위해 많이 사용 BOOL *stop
하고 있고 열거 블록에서의 사용법을 이해하는 데 어려움을 겪고 있습니다.
NSArray
클래스 참조 상태
stop
: 부울 값에 대한 참조입니다. 은 블록YES
배열의 추가 처리를 중지 하기 위해 값을 로 설정할 수 있습니다 .stop
인수는 아웃 전용 인수입니다. 이 부울YES
은 블록 내 에서만 설정해야합니다 .
거기에 열거를 중지하기 위해 블록에 다음을 추가 할 수 있습니다.
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
내가 말할 수있는 바로는, 명시 적으로 적으로 설정하지 않는 *stop
하기 YES
위해 어떤 부작용이 없습니다. 열거는 배열의 끝에서 자동으로 중지되는 것입니다. 그래서 *stop
블록에서 정말 필요합니까?
stop
Block에 대한 인수를 사용하면 열거를 조기 에 중지 할 수 있습니다 . break
일반 for
루프 와 동일 합니다. 배열의 모든 개체를 살펴볼 수 있습니다.
for( id obj in arr ){
if( [obj isContagious] ){
break; // Stop enumerating
}
if( ![obj isKindOfClass:[Perefrigia class]] ){
continue; // Skip this object
}
[obj immanetizeTheEschaton];
}
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if( [obj isContagious] ){
*stop = YES; // Stop enumerating
return;
}
if( ![obj isKindOfClass:[Perefrigia class]] ){
return; // Skip this object
}
[obj immanentizeTheEschaton];
}];
호출 범위의 변수에 대한 참조이기 때문에 out 매개 변수입니다. 블록 내부에 설정해야하지만 의 내부에서 읽히는 enumerateObjectsUsingBlock:
것과 같은 방식으로 NSError
의가 일반적으로 프레임 워크 호출에서 코드 로 다시 전달됩니다 .
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block {
// N.B: This is probably not how this method is actually implemented!
// It is just to demonstrate how the out parameter operates!
NSUInteger idx = 0;
for( id obj in self ){
BOOL stop = NO;
block(obj, idx++, &stop);
if( stop ){
break;
}
}
}
반응형
'IT' 카테고리의 다른 글
OS X에 가장 비용 체계 또는 LISP 구현은 무엇입니까? (0) | 2020.09.16 |
---|---|
PHP cURL HTTP 코드 반환 0 (0) | 2020.09.16 |
폐쇄 경고에서 foreach 변수에 액세스 (0) | 2020.09.16 |
Typescript 인터페이스 링크 (0) | 2020.09.16 |
빈 목록 인 기본 기본 변수를 피하는 표준적인 방법은 무엇입니까? (0) | 2020.09.16 |