대기열에 제출하는 블록이 있으며 특정 조건이 참일 경우에만 블록을 실행하고 싶습니다. 그것은 다음과 같은 종류의 외모 :코드 블록에서 변수를 참조로 사용하는 방법은 무엇입니까?
bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
이 가진 문제입니다 블록 후 블록의 NO 외부 인사 변화의 값은 큐에 있지만 실행되기 전에 제출 된 경우 블록 안의 hi 값은 여전히 YES입니다.
설명서를 살펴본 결과 __block 지시어가 발견되었지만 도움이 될 수 있지만 작동하지는 않았습니다.
__block bool hi = YES;
dispatch_async(queue, ^{
if (hi == YES)
do stuff;
});
및
bool hi = YES;
dispatch_async(queue, ^{
__block boolean hi2 = hi;
if (hi2 == YES)
do stuff;
});
을 그리고 그 중 어느 것도 작동하는 것 : 나는 시도했습니다.
Martin을 실행하면 예상대로 작동하므로 __block 지시문에 참조가 저장됩니다. BOOL b = YES; \t 공극 (^ 블록)() = [^ { \t \t 경우 (b == YES) { \t \t \t NSLog (@ "B == YES"); \t \t} else { \t \t \t NSLog (@ "b == NO"); \t \t} \t} [autorelease]; \tb = NO; \t block(); – Mattia