2

メモリ警告を受け取った後、EXC_BAD_ACCESS でアプリケーションに問題が発生しています。これが私がテストしている方法です。メモリを割り当てるだけで解放しない単純なアプリケーションを作成しました。約 14 MB の空きメモリを残して大量のメモリを割り当てた後、メイン アプリケーションに切り替えます。すぐに didReceiveMemoryWarning でメモリ警告を受け取ります。しばらくすると、UIButton に画像を設定する関数でアプリがクラッシュします。

-(void)activateRecordButton
{
    UIImage *image = [UIImage imageNamed:@"audioRecordOn"];
    [recButton setImage:image forState:UIControlStateNormal];
}

私が得るエラーは、setImage を呼び出す行の EXC_BAD_ACCESS(code=1, address=some_address) です。これらの行にコメントを付けると、UIButton のイメージを設定する別の関数でアプリがクラッシュします。

これは私の didReceiveMemoryWarning です:

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

なぜこうなった?これは、画像をロードするためのメモリがなくなったためか、または他のアプリが多くのメモリを割り当てたときに recButton が何らかの理由で割り当て解除されたためでしょうか?

Iphone 4 ios 5.1.1で実行しています

4

1 に答える 1

3

UIViewControllerは、デフォルトでそのビューをで解放しますdidReceiveMemoryWarning(可能な場合)。手動で保持しなかった場合も、ボタンが解放されます。

setImage次に、存在しないオブジェクトでが呼び出され、これにより。がトリガーされEXC_BAD_ACCESSます。

于 2012-08-26T14:39:29.973 に答える