0

エンドポイント URL 要求を処理するアプリに NSOperationQueue があります。リクエストの重複を避けるために、可能な限りキューをチェックして、このエンドポイント コールがすでに処理されているかどうかを確認します。

なんらかの理由で、通常、エンドポイント操作キューが地獄のようにスパムされている場合にのみ発生しますが、他の場合もランダムに発生します (これは、ある種の非常にまれな競合状態であることを意味します)。 . 次の行で発生します。

 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