2

[注: この Q&A は、説明のつかないクラッシュを起こしたブロックとキューを使用する一握りの開発者にとって主要なものです。]

私のアプリはdispatchQueueを使用しており、割り当てが解除されると、次の奇妙なクラッシュが発生します。

[MyClass dealloc]
objc_storeStrong
objc_release
_dispatch_xref_dispose

私のアプリは iOS4.3 と iOS5.1 で問題なく動作しました。

4

1 に答える 1

3

ブロックがキューに入れられた状態でキューが中断されたことがわかりました。キューを一時停止するときに設定するフラグ、dispatchQueueResumed、ブロック自体がキャンセルされたと見なす必要があるかどうかを示す __block BOOL 変数があるため、dealloc を次のように変更しました。

- (void)dealloc (
    if(!dispatchQueueResumed) {
        dispatchQueueCancel = YES;
        dispatch_resume(dispatchQueue);
        dispatch_group_wait(dispatchQueueGroup, DISPATCH_TIME_FOREVER);
    }
}
于 2012-09-22T00:45:59.393 に答える