2014-09-23 5 views
0

NSInvocationinvoke을 호출하면 waitUntilDone:YES이라는 인수로 performSelector:을 호출하는 것과 동일합니까? 즉, 호출 된 선택기가 완료 될 때까지 invoke이 실행을 차단합니까?[NSInvocation invoke]는 완료 될 때까지 실행을 차단합니까?

즉, 다음 두 코드 줄이 정확히 동일합니까?

// myInvocation is of type NSInvocation 
[myInvocation invoke]; 
[myInvocation performSelectorOnMainThread:@selector(invoke) withObject:nil waitUntilDone:YES]; 

답변

3

[NSInvocation invoke]는 NSInvocation이 나타내는 메시지를 호출하는 것과 정확히 같습니다. 다른 메시지 호출과 마찬가지로 현재 스레드에서 메시지 호출을 수행합니다.

+0

하지만 실행을 차단합니까? 비 차단 인'NSMutableData.writeToFile :'의 문제로 인해 묻습니다. 예 : http://stackoverflow.com/questions/11161079/nsdata-writetofileatomically-doesnt-immediately-save-the-file – nyi

+2

나는 그것이 보통의 메소드 호출과 정확히 동일하다고 말했다. 일반 메서드 호출이 차단됩니다. [someObject doStuff]를 호출하거나 호출을 생성하고 [invoke invoke]를 호출하는 것은 정확히 일치합니다. – gnasher729

+0

writeToFile에 문제가 있습니까? 문서는 논 블로킹에 대해 전혀 말하지 않기 때문에 그것이 차단되고 있다고 가정합니다. 특히 비 블로킹 호출의 경우 완료 시점을 알아내는 방법에 대한 정보가 필요하고 아무 것도 없다. 누군가 그것을 사용하는 데 문제가 있다고해서 그것이 옳다는 것을 의미하지는 않습니다. nonblocking을 사용하면 해당 메소드를 사용할 수 없게됩니다. – gnasher729