0

我的应用程序中有一个 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;

}

我想也许在这个循环正在进行时操作队列正在被修改,但我不知道这会如何发生 - 当我收到崩溃时,我可以查看相关对象的内容,它们看起来很好。有任何想法吗?

4

0 回答 0