ガベージコレクションされていないMacFUSECocoaアプリケーションを作成しています。その中で、GCDブロックをデリゲートとして使用したいと思います。ただし、ブロックの呼び出し中にプログラムがクラッシュしEXC_BAD_ACCESS
、トレイルにのみが残ります。
私のプログラムは、ガベージコレクション(または64ビット)をサポートしないMac OS10.5SDKに対して構築されたフレームワークとMacFUSEフレームワークを使用しています。プログラムは、32ビットプログラムとして警告やエラーなしでビルドされます。その他のビルド設定(最適化レベルなど)は元の値のままでした。
だから私は私のアプリケーションコントローラーを持っており、そこからこのブロックを作成して呼び出しますrunWithContinuation:
AFSPasswordPrompt* prompt = [[AFSPasswordPrompt alloc] initWithIcon:icon];
dispatch_block_t continuation = ^{
archive.password = prompt.password;
[self mountFilesystem:fsController];
[prompt performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
};
[prompt runWithContinuation:continuation];
runWithContinuation:
ブロックを保持し、ペン先をインスタンス化します。ブロックは、ユーザーが「開く」ボタンを押してパスワードプロンプトを閉じたときにのみ呼び出されます。
-(void)runWithContinuation:(dispatch_block_t)block
{
continuation = [block retain];
[passwordPrompt instantiateNibWithOwner:self topLevelObjects:NULL];
imageView.image = image;
[window makeKeyWindow];
}
-(IBAction)open:(id)sender
{
continuation();
[self close];
}
-(void)close
{
[window close];
[continuation release];
}
私の問題は、をcontinuation()
押すと、プログラムがをトリガーしEXC_BAD_ACCESS
、最後のスタックフレームがと呼ばれること??
です。そのすぐ下にopen:
メソッド呼び出しがあります。
どこから来たのか本当にわかりません。NSZombiesは有効になっており、何も報告しません。
何か案は?