Нужно, чтобы текущий поток дождался завершения асинхронного запроса.
-(NSArray*)getData{
__block NSArray *returnData = nil;
if([self internetConnect]){
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void){
[self reloadData:^(NSArray* loadData){
returnData = loadData;
}];
});
}else{
}
return returnData;
}
Можно также завести свою собственную конкурентную очередь
+(dispatch_queue_t)sharedConcurrentQueue {
static dispatch_queue_t queue = nil;
static dispatch_once_t onceToken = 0;
dispatch_once(&onceToken, ^{
queue = dispatch_queue_create("MyQueueName", DISPATCH_QUEUE_CONCURRENT);
});
return queue;
}
И помещать в нее любые задачи таким образом
-(void)testFunc {
dispatch_async([MyClass sharedConcurrentQueue], ^(void){
// Все, что хотим запустить и идти дальше, не дожидаясь
});
dispatch_sync([MyClass sharedConcurrentQueue], ^(void){
// Все, что хотим запустить и подождать завершения
});
}
Почитать об этом можно
тут.
Или гуглить "Grand Central Dispatch".