Я изучаю iOS, и когда дело доходит до GCD, это сбивает с толку. Давайте разберемся, я пишу небольшую программу, которая извлекает данные из Интернета. Вот мой вьюконтроллер
NSMutableArray dataArray = [NSMutableArray array];
[querysomethingwithblock:(^ {
//do some stuff here
[otherquerywithblock:( ^ {
//do some stuff here
// Here I got the data from internet
// Do loop action
[dataArray addObject:data];
})];
})];
// here I want to perform some actions only after get data from internet
[self performAction:dataArray];
Как я могу достичь этой цели. На практике [self performAction:dataArray]
всегда увольняют до того, как я получу данные. Я пытался играть с GCD, но не повезло.
Вот некоторые шаблоны, которые я пробовал до сих пор
dispatch_async(queue, ^{
// Do query stuff here
dispatch_async(dispatch_get_mainqueue(), ^{
//perform action here
});
{;
Или используя dispatch_group_async
, dispatch_group_wait
, dispatch_group_notify
Единственный способ, с которым я могу справиться прямо сейчас, - это использовать dispatch_after
, но дело в том, что время загрузки является переменным, не рекомендуется указывать здесь конкретное время.
Большое спасибо за любой совет.