인수 유형은 (id *)
이어야합니다. 객체가 아니라 객체를 가리키는 포인터. 이것은의 방법 -popFilename
을 실행
__block id poppedFilename;
dispatch_sync(dispatch_get_main_queue(), ^{
poppedFilename = [self popFilename];
});
// do something with the popped file
: 당신은 당신이 주 스레드에서 실행해야하는 방법에서 값을 반환 할 경우
는하지만, 더 좋은 솔루션은 블록과 GCD를 사용하는 것입니다 결과를 poppedFilename
에 저장합니다. 교착 상태가 발생할 수 있으므로 주 스레드에서이 메서드를 호출하지 않도록주의해야합니다. 메인 스레드에있는 경우에 당신이 확실하지 않은 경우, 다음과 같이 사용할 수 있습니다 : @selector (queuedFileNamesPop : withObject : FN waitUntilDone : 당신이`[자기 performSelectorOnMainThread을 사용할 수없는 이유
__block id poppedFilename;
if ([NSThread isMainThread]) {
poppedFilename = [self popFilename];
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
poppedFilename = [self popFilename];
});
}
YES ]; 대신'? –
@AndreyZ : 그렇기 때문에이 호출이 반환 된 후에'fn'은 여전히'nil'입니다. – Albert
@Albert : fn이'nil'으로 시작했기 때문입니다. – MusiGenesis