1

UIViewController のサブクラスに didReceiveMemoryWarning を実装しています。私のコードは次のようになります。

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    [self cleanUp];
}

私のアプリが実際にメモリ警告を受け取ったとき、アプリは[self cleanUp]回線上で EXC_BAD_ACCESS でクラッシュしました (メソッドは存在します)。これはどのように起こりますか?私が理解しているように、フレームワークはdidReceiveMemoryWarningメソッドを呼び出し、実行を試みる前にクラスを解放しました[self cleanUp]。なぜこれが起こるのでしょうか?どうすればこれを防ぐことができますか?

4

3 に答える 3

1

ビューコントローラーで異常なことをしていますか? selfクラッシュが発生したときの値は何ですか? デバッグ (最適化オフ) ビルドとリリース ビルドの両方で発生しますか?

NSZombieEnabledで実行してみてください。これが不均衡な保持/解放の問題である場合は、それを見つけるのに役立ちます。

于 2011-02-17T15:59:56.223 に答える
1

Xcode は を呼び出し-(void)cleanUpた行を指していましたが、クラッシュは実際にはメソッド内で発生していました。コード内では、すでに解放されている配列内の要素にアクセスしていたため、EXC_BAD_ACCESS. 役に立つ提案をしてくれたすべての人に感謝します。 [self cleanUp]-(void)cleanUp

于 2011-02-23T05:58:53.900 に答える
0

大まかな推測: 最初に [self cleanup] を呼び出し、次に super を呼び出します。それが役立つ場合は、sim でメモリ警告をシミュレートすることもできます。

于 2011-02-17T02:18:16.287 に答える