私のiPhoneアプリケーションでは、次の方法で表示される「統計」ビューがあります。メソッド自体は、ユーザーがボタンに触れると呼び出されます。この方法は、統計においてUINavigationController
Objective-C/iPhoneのメモリ管理
- (void) showStatsView {
StatsViewController *statsViewController = [[StatsViewController alloc] initWithNibName:@"Stats" bundle:[NSBundle mainBundle]];
[self pushViewController:statsViewController animated:YES];
[statsViewController release]; // (1)
}
自体を視聴中NSDictionary
、「statsDict
」で使用されています。次のオプションを持つプロパティとして宣言されています:(非原子的、保持)。私StatsViewControllerで
、viewDidLoad
方法はそうのようなNSDictionary
のインスタンスを作成します。私はリロードしようとすると、私の問題が発生した
- (void)dealloc {
/*
dealloc'ing other stuff here which is irrelavent
*/
[statsDict release]; // (2)
[super dealloc];
}
:ようStatsViewControllerため
MyAppDelegate *appDelegate= (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
stats = [[NSDictionary alloc] initWithContentsOfFile:[appDelegate statsFilePath]];
私のdeallocメソッドが見えます統計ビューは一度表示された後に表示されます。つまり、showStatsViewを起動させるボタンを押します。統計ビューが読み込まれ、現在はすべて正常です。
統計ビューのボタンを押してメインメニューに戻ります(これは[self popToViewController:MainMenuViewController];
を使用するメソッドを呼び出して行います)。ここから、統計ビューを再度ロードするボタンを押した場合(2回目)、私のアプリはEXC_BAD_ACCESS
でクラッシュします。
showStatsViewで(1)とマークされた行を削除すると、deallocで(2)とマークされた行を削除した場合と同様に正常に動作します。しかし、私が読んだところでは、statsDictを私はそれを割り当てたようにリリースしなければなりません、同様に、私はそれを割り当てたので、statsViewControllerをリリースするべきです。しかし、もし私が両方をすれば - それはクラッシュします!私は何をすべきか?
私は客観的なメモリ管理の理解にいくつかのステップを逃したことがありますか?
[appDelegate statsFilePath]の実装を投稿できますか? –
ここでstatsDictを設定しますか?私は "stats"を参照してください – newacct
stats/statsDict混乱をクリアしてください。それはタイプミスですか?誤って辞書の代わりにいくつかのivarに辞書を割り当てていますか? – VoidPointer