Если вы можете ориентироваться на iOS4, вы можете обойти асинхронный обратный вызов, используя блоки и GCD.
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^ {
Object * obj = [[Object alloc] init];
[obj excuteSync];
// do something
[obj release];
});
Я считаю это полезным в некоторых ситуациях, но ваш пробег может отличаться.