我的应用程序中有一个 NSOperationQueue 来处理端点 URL 请求。为避免添加重复请求,我会尽可能检查队列以查看是否已处理此端点调用。
出于某种原因,通常只有当端点操作队列像地狱一样被垃圾邮件发送时,但在其他时候也是随机的(对我来说这是某种非常罕见的竞争条件),在扫描我的操作队列以查找重复项时,我得到一个 EXC_BAD_ACCESS . 它发生在线:
if (![endpointOperation.urlRequest respondsToSelector: @selector(URL)]) {
这是代码:
-(BOOL)operationQueueContainsDuplicateOperations
{
for (EndpointOperation *endpointOperation in [EndpointOperationQueueManager instance].operationQueue.operations) {
if (![endpointOperation.urlRequest respondsToSelector: @selector(URL)]) {
return NO;
}
if (![self.urlRequest respondsToSelector: @selector(URL)]) {
return NO;
}
if ([[endpointOperation.urlRequest.URL absoluteString] isEqualToString:[self.urlRequest.URL absoluteString]] &&
(self.relatedProfileIds && [endpointOperation.relatedProfileIds isEqualToArray:self.relatedProfileIds])) {
return YES;
}
}
return NO;
}
我想也许在这个循环正在进行时操作队列正在被修改,但我不知道这会如何发生 - 当我收到崩溃时,我可以查看相关对象的内容,它们看起来很好。有任何想法吗?