Ответ 1
Просто вызовите его из основного потока, как это.
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication delegate] fooBar];
});
Привлечение к делегату приложения, подобному этому, - это намек на то, что ваша архитектура может использовать небольшую очистку.
Вы можете вызывать делегатов из любого потока, который вы хотите. Вам нужно только убедиться, что вы находитесь в основном потоке для вызовов UIKit. Или что вы на правильной нити, которую ожидают объекты CoreData. Все зависит от контракта API, который ваши объекты имеют.