Тип аргумента должен быть (id *)
, т.е. указатель на объект, а не объект.
Но если вы просто хотите вернуть значение из метода, который вам нужно выполнить в главном потоке, лучше использовать блоки и GCD:
__block id poppedFilename;
dispatch_sync(dispatch_get_main_queue(), ^{
poppedFilename = [self popFilename];
});
// do something with the popped file
Выполняет метод -popFilename
в главном потоке и сохраняет результат в poppedFilename
. Вы должны быть осторожны, чтобы не вызывать этот метод в главном потоке, так как это может привести к тупику. Если вы не уверены, что находитесь в главном потоке, вы можете использовать что-то вроде этого:
__block id poppedFilename;
if ([NSThread isMainThread]) {
poppedFilename = [self popFilename];
} else {
dispatch_sync(dispatch_get_main_queue(), ^{
poppedFilename = [self popFilename];
});
}