我的应用中有一个处理端点URL请求的NSOperationQueue。为避免添加重复请求,我尽可能检查队列以查看是否已处理此端点调用。
出于某种原因,通常只有当端点操作队列像地狱一样被垃圾邮件发送,而且在其他时间也随机发送(意味着我认为这种情况非常罕见),我在扫描操作时会得到一个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;
}
我想也许正在修改操作队列,而这个循环正在进行中,但我不知道会发生什么 - 当我收到崩溃时,我可以查看相关对象的内容,看起来很好。有什么想法吗?