iOS4 プロジェクトを ARC に変換しています。PTPasscodeViewController、AppPirater、Flurry などの外部ライブラリを使用しています。EXC_BAD_ACCESS に到達し続けます。これは、割り当て解除されたオブジェクトにメッセージを送信していることを意味します。Instruments を使用してトレースしていますが、解決方法がわかりません。SOの誰かが私を正しい方向に向けてくれることを願っています。
私の SettingsViewController は ARC なしでコンパイルされています (-fno-obj-arc)。これは、IouViewController と呼ばれるメインのルート ビュー コントローラーで初期化されます。
-(void)showSettings:(id)sender {
SettingsViewController *infoView = [[SettingsViewController alloc] init];
[infoView setIouArray:iouTableArray];
[[self navigationController] pushViewController:infoView animated:YES];
}
計測器を実行すると、これが原因であることがわかります。
それで、画像 2 から、リリースが「main.m」からのものであることがわかりますか??? main.m の autorelease プールと関係があると思います。そのため、ARC に変換する際に犯した「間違い」の 1 つは、main.m を ARC 対応の新しいプロジェクトのものと同じに変更したことです。それが違いを生むかどうかはわかりませんが、他のEXC_BAD_ACCESSの問題があり、それを行うことでうまくいきました。
参考までに、ここに私のmain.mがあります:
int main(int argc, char *argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([IouApp2AppDelegate class]));
}
}
補足として、クラッシュすると、「Thread 1: signal SIGKILL」というメッセージで main.m にジャンプします。
SOなしで何をするかわかりません。コミュニティからのすべての助けに感謝します。
更新 1:SettingsViewController に ARC を使用しようとすると、扱いにくいエラーが発生します。これは一例です:
// passcode is correct, direct to PasscodeSettingsViewController
// self retain, autorelease might be needed so that you do not look access to where the navigationController is since we pop one
[[self retain] autorelease];
// if you set popViewControllerAnimated:YES, weird title things happen. DO NOT MESS!!!
[[self navigationController] popViewControllerAnimated:NO];
このコード スニペットは、PTPasscodeViewController サンプル コードベースからのものです。ARCを使用すると、エラーが発生しました:
[rewriter] it is not safe to remove an unused 'autorelease' message; its receiver may be destroyed immediately