При загрузке из службы в фоновом режиме я предпочитаю использовать синхронные вызовы, выполняющиеся в отдельном потоке. Вот как я это делаю в большинстве своих приложений.
вызовите мой общий метод, который раскручивает новую нить
[[MyServiceSingleton sharedInstance] doSomeWorkInBackground:param1];
внутри синглтона - определить приватный метод - doSomeWorkBackgroundJob (я использую подход с пустой категорией) для вызова внутри метода doSomeWorkInBackground
[self performSelectorInBackground:@selector(doSomeWorkBackgroundJob:) withObject:param1];
в фоновом режиме - создание пула, выполнение работы, дренажный пул
- (void)doSomeWorkBackgroundJob:(NSString *)param1 {
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
assert(pool != nil);
// you can call another method here or just create your synchronous request and handle the response data
[pool drain];
}