我在使用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:
BTW:NSBlockOperation完成后,主线程将释放
答案 0 :(得分:1)
我发现了问题。所以基本上我在NSOperationQueue中创建了很多NSBlockOperation,这创建了许多线程。显然,当EKEventStore尝试使用authorizationStatusForEntityType时,他会尝试在新线程中执行此操作并等待完成。 (我们可以在信号量等待陷阱中看到)。所以解决方案是限制NSOperationQueue中的操作次数。这解决了问题。