当我启动iPhone 4时,我已经为我创建了这个应用程序。现在,此应用程序无法在iPhone 4S上运行。

我已将罪魁祸首部分确定为GCD的一部分。这里是:

dispatch_group_t my_group = dispatch_group_create();

dispatch_queue_t queue1 =
        dispatch_queue_create("Queue 1", NULL);

dispatch_queue_t queue2 =
        dispatch_queue_create("Queue 2", NULL);


dispatch_group_async(my_group, queue1, ^{
        [self doStuff1];
});

dispatch_group_async(my_group, queue2, ^{
        [self doStuff2];
});

dispatch_group_notify(my_group, dispatch_get_main_queue(), ^{
 // this is block 3, this is to be executed after both queues end processing
 // this is never executed on iPhone 4S, but is executed on iPhone4
 // no error message, but execution never starts inside this block
});

这个想法是这样的:创建两个队列和一个队列。我使用该组异步触发两个队列的任务。当两者都完成时,小组将激发另一个任务块。

这项功能在iPhone 4上表现出色,但最后一块3从未实现。

有什么理由吗?有什么线索吗?

谢谢。

最佳答案

也许doStuff1doStuff2处于死锁状态,或者其他原因阻塞了主线程? 4S与4S不同,它具有多个内核,因此可能是您遇到了一些以前从未见过的多线程锁定问题。

您确定两个块实际上都已完成,并且主线程可用于运行结果块吗?也许一些完整的代码(即doStuff1和2的主体)会有所帮助?

10-08 04:25