使用NSBlockOperation和EKEventStore时主线程卡住

时间:2014-08-06 12:25:28

标签: ios objective-c xcode

我在使用NSBlockOperation并尝试访问EKEventStore时遇到问题。这是我的代码:

  • 此代码在Async中运行

            NSBlockOperation *wordsOp = [NSBlockOperation blockOperationWithBlock:^{
                //call a syncronous call to get the words dictionary
                NSLog(@"Before Get Word with ID: %@",resourceID);
                NSDictionary *wordsDic = [self getWordsForResourceID:resourceID];
                NSLog(@"After Get Word with ID: %@",resourceID);
    
            }];
    
  • 此代码在主线程上运行

        return [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
    
  • 这是我的Debug Navigator:

enter image description here

BTW:NSBlockOperation完成后,主线程将释放

1 个答案:

答案 0 :(得分:1)

我发现了问题。所以基本上我在NSOperationQueue中创建了很多NSBlockOperation,这创建了许多线程。显然,当EKEventStore尝试使用authorizationStatusForEntityType时,他会尝试在新线程中执行此操作并等待完成。 (我们可以在信号量等待陷阱中看到)。所以解决方案是限制NSOperationQueue中的操作次数。这解决了问题。