[注: この Q&A は、説明のつかないクラッシュを起こしたブロックとキューを使用する一握りの開発者にとって主要なものです。]
私のアプリはdispatchQueueを使用しており、割り当てが解除されると、次の奇妙なクラッシュが発生します。
[MyClass dealloc]
objc_storeStrong
objc_release
_dispatch_xref_dispose
私のアプリは iOS4.3 と iOS5.1 で問題なく動作しました。
[注: この Q&A は、説明のつかないクラッシュを起こしたブロックとキューを使用する一握りの開発者にとって主要なものです。]
私のアプリはdispatchQueueを使用しており、割り当てが解除されると、次の奇妙なクラッシュが発生します。
[MyClass dealloc]
objc_storeStrong
objc_release
_dispatch_xref_dispose
私のアプリは iOS4.3 と iOS5.1 で問題なく動作しました。
ブロックがキューに入れられた状態でキューが中断されたことがわかりました。キューを一時停止するときに設定するフラグ、dispatchQueueResumed、ブロック自体がキャンセルされたと見なす必要があるかどうかを示す __block BOOL 変数があるため、dealloc を次のように変更しました。
- (void)dealloc (
if(!dispatchQueueResumed) {
dispatchQueueCancel = YES;
dispatch_resume(dispatchQueue);
dispatch_group_wait(dispatchQueueGroup, DISPATCH_TIME_FOREVER);
}
}