Если я звоню invoke
по адресу NSInvocation
, это то же самое, что и вызов performSelector:
с аргументом waitUntilDone:YES
? То есть, invoke
блокирует выполнение до тех пор, пока вызываемый селектор не будет выполнен?Выполняет [NSInvocation invoke] выполнение блока до завершения?
Другими словами, являются ли следующие две строки кода одинаковыми?
// myInvocation is of type NSInvocation
[myInvocation invoke];
[myInvocation performSelectorOnMainThread:@selector(invoke) withObject:nil waitUntilDone:YES];
Но будет ли он блокировать выполнение? Я спрашиваю из-за проблемы с 'NSMutableData.writeToFile:', которая не блокирует. См. http://stackoverflow.com/questions/11161079/nsdata-writetofileatomically-doesnt-immediately-save-the-file – nyi
Я сказал, что это точно так же, как обычный вызов метода. Обычные вызовы методов блокируются. Вызов [someObject doStuff] или создание вызова и вызов [invocation invoke] _exactly_ совпадают. – gnasher729
У вас возникли проблемы с writeToFile: самостоятельно? В документации ничего не сказано о неблокировании, поэтому я предполагаю, что он блокирует. Тем более, что для неблокирующего вызова должна быть какая-то информация, как узнать, когда она будет завершена, и нет. Просто потому, что у кого-то есть проблемы с этим, это не значит, что они правы. Будучи неблокируемым, этот способ неприменим. – gnasher729