Ios 如何使用GCD提高性能

Ios 如何使用GCD提高性能,ios,iphone,multithreading,grand-central-dispatch,Ios,Iphone,Multithreading,Grand Central Dispatch,我的情况是,当用户登录时,我需要从五个不同的表中提取数据。目前,我正在正常提取数据,因此提取数据需要花费更多的时间(在我的情况下是1分钟),如何使用GCD提高性能。有人能帮我吗?试着编写获取数据的代码,例如用于在中获取数据的方法调用 dispatch_async(dispatch_get_main_queue(), ^{ [self performSelector:@selector(getItemsFromWebservice) withObject:nil a

我的情况是,当用户登录时,我需要从五个不同的表中提取数据。目前,我正在正常提取数据,因此提取数据需要花费更多的时间(在我的情况下是1分钟),如何使用GCD提高性能。有人能帮我吗?

试着编写获取数据的代码,例如用于在中获取数据的方法调用

dispatch_async(dispatch_get_main_queue(), ^{
                [self performSelector:@selector(getItemsFromWebservice) withObject:nil afterDelay:0];
            });

请尝试使用此代码获取数据。我想这可能对你有帮助

dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
                dispatch_async(q, ^
                               {
                                   [self yourMethod];
                               });

使用它五次。这将获得一个全局并发队列。因此,五个获取任务将并发执行。

创建一个服务,通过一个http请求获取所有信息。如果适用的话,这是最好的解决方案。

我有5个方法,所以我需要创建5个dispatch\u get\u main\u queue(),所有这些都在主线程上运行,因此这将是主线程的负担?尝试在1个dispatch\u get\u main\u queue()中调用5个方法如果所有调用都在同一个调度队列中,则需要相同的时间,因此我需要创建5个全局队列并调用它们,对吗?是的。这取决于您的功能或要求。我将创建一个服务,通过一个http请求获取所有信息。如果适用的话,这是最好的解决方案。查看您现有的代码会很有帮助。“从表中获取数据”是什么意思?那么如何识别每个方法的获取已完成?在我的场景中,若所有方法的数据都被获取,我应该将用户重定向到新视图,我应该在notify方法中执行吗?我应该在哪里执行it@user3816512当所有方法都完成时,
dispatch\u group\u notify
中的块将被删除called@user3816512是的,您应该在notify方法中重定向
    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^ {
        [self fetchMethod1];
    });
    //......
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^ {
        [self fetchMethod5];
    });

    dispatch_group_notify(group, dispatch_get_main_queue(), ^ {
        // update UI
    });
    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^ {
        [self fetchMethod1];
    });
    //......
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^ {
        [self fetchMethod5];
    });

    dispatch_group_notify(group, dispatch_get_main_queue(), ^ {
        // update UI
    });