ええ、私はこのクレイジーな iPhone の世界では Java 派です。メモリ管理に関しては、自分が何をしているのかまだよくわかりません。
ナビゲーション コントローラーを使用するアプリがあり、次のビューに進むときは、次のようなコードがあります。
UIViewController *myController = [[MyViewController alloc] initWithNibName:@"MyView"
bundle:[NSBundle mainBundle];
[[self navigationController] pushViewController:myController animated:YES];
現在、メモリ管理に関するAppleの基本的なルールに従っています
名前が「alloc」または「new」で始まるメソッド、または「copy」を含むメソッド (たとえば、、、または ) を使用してオブジェクトを作成した場合、またはオブジェクトにメッセージを送信した場合、オブジェクトの所有権を
alloc
取得newObject
しmutableCopy
ますretain
。release
またはを使用して所有しているオブジェクトの所有権を放棄する責任がありますautorelease
。それ以外のオブジェクトを受け取った場合は、それを解放してはなりません。
myController
私にとって、それは私が をリリースするか、メッセージを与えるべきであることを意味しautorelease
ます。しかし、それをしようとすると、ビューをスタックからプッシュおよびポップするときに、アプリケーションがクラッシュしてしまいます。
これは私には適切な匂いがしませんでしたが、Instruments を実行すると、メモリ リークが発生していないと主張されます。
だから私は私の質問は
- 私はこれを正しく行っていますか?
- ナビゲーション コントローラーが MyViewController の所有権を取得して、メモリ リークがないことを説明していますか?
- ルート ViewController のインスタンス変数に myController を割り当てる必要がありますか? その場合、retain とマークされ、ルートの dealloc メソッドで解放します