まず、obj-Cでメモリがどのように動作するかについての記事を読んだあと、どこでも "self"を配置し始めて以来、私のアプリではそれほど多くのメモリの問題は見たことがありません。さて、私はあらゆる種類の問題を抱えています(私のコーディングの不器用さを明らかにします)。私がObjective-Cの初心者であることを認めても、私は人生の中でこれまでにメモリ管理に関して大きな問題を抱えたことはないと認めます。しかし、私はそれに慣れて練習を取ると思う。UINavigationViewControllerメモリ解放
今、私の質問に。
私は上記のコントローラへの参照を保持するクラスインタフェースプロパティ(self.todoCreate)を持っています。このコントローラーは、ボタンを押すことによってナビゲートされます。
@property (nonatomic, retain) TodoTaskCreateController *todoCreate;
次のコードは、ナビゲーションビューの変更が生じるの抜粋です:だからここ
TodoTaskCreateController *viewController = [[TodoTaskCreateController alloc]
initWithNibName:@"TodoTaskCreateController"
bundle:[NSBundle mainBundle]];
self.todoCreate = viewController;
[viewController release];
// slide-in todoCreate controller.
if (self.navigationController != nil && self.todoCreate != nil) {
[self.navigationController pushViewController:self.todoCreate animated:YES];
}
は私の問題です:
私はそれが動作これを最初に実行したとき。 2回目のビュー画面に入ると、メインビューに戻ります。 また2回目に再度ナビゲートしようとすると、self.todoCreate
にviewController
が割り当てられているところでアプリがクラッシュします。
メインビューのviewDidAppear
メソッドでは、[self.todoCreate release]
を呼び出します。
誰でもこれを説明できますか?
PS - 多くのiPhoneアプリがランダムにクラッシュすることは間違いありません。
もし 'self。todoCreate = 'に' retain'プロパティを指定すると、古い値が解放されます。 'assign'プロパティで同じことをすると、古い値は解放されません。 –
ちょっと待って、あなたの説明どおりに正反対の振る舞いをしていると思った。 retainは参照カウントをインクリメントするので、retainで記述されたプロパティは解放されませんか?しかし、もう一度、ちょうど私が物事のハングアップを持っていると思ったとき、このような何かがそれを私の理解を揺さぶる。非常にイライラ。 –