1

私はiOSプログラミングに不慣れで、View Controllerプログラミングガイドを読みましたが、まだ不明な点がいくつかあります。

  • ビューコントローラのビューは破棄されますが、ビューコントローラは残ります。自分がビューコントローラを破棄したいのか、それとも見逃したのかについては何も指定されていません。VCガイドによると、メモリが他のリソースに不足し始めるとiOSはVCを破棄し、VCの見方も同じです。VCのメモリ管理を理解する必要があります。私の2番目のポイントを読んでください。

  • uinavigationcontrollerには、友達のリストを表示するtableviewcontrollerがあり、友達のいずれかを選択すると、チャットの別のVCをプッシュします。問題は、友達を選択するたびに、チャットVCの新しいインスタンスを作成する必要があるかどうかです。このチャットVCは、チャットしようとしているすべての友達にとってどのようにユニークになるのでしょうか。また、メッセージをDBに保存しているので、フレンドウィンドウでメッセージを開いたり閉じたりしても、ユーザーに空白のビューが表示されることはありません。チャットVCの1つの瞬間だけがすべての友達に一意に使用される可能性はありますか(特定の友達のメッセージのみを表示し、チャットしようとしている相手に送信することを意味します)。この問題は、ビューコントローラ間でのデータの受け渡しに関連していると思いますが、混乱しています。

私が混乱していることを明確に定義したことを願っています。愚かな間違いは無視してください。

ありがとうございました。

4

1 に答える 1

3

あなたの質問に答える-

  1. ビューコントローラのビューは破棄されますが、ビューコントローラは残ります

UIViewControllerガイドによると-これらのビューを作成し、メモリ不足の状態やビューコントローラ自体が解放されたときなど、適切なタイミングでそれらの所有権を放棄する責任があります。

したがって、ViewControllerをリリースするために所有権を取得する必要があります。また、UIViewControllerクラスは、不要なメモリを解放するdidReceiveMemoryWarningメソッドを介して、メモリ不足の状態を自動的に処理します。

  1. あなたのシナリオでは-

TableView->セルをクリックすると次のビューをプッシュ->このビューをポップしてテーブルビューに戻ります(ここでメモリが解放されます)->テーブルビューで再び->セルをクリックすると新しいビューコントローラがプッシュされます。

このようにして、メモリを処理します。階層内にある場合、次のようないくつかのビューをプッシュしています-

VC1-> VC2> VC3-> VC4

このシナリオでは、ナビゲーションコントローラーが後方に移動する柔軟性を提供するため、ナビゲーションコントローラーはこれらすべてのビューコントローラーのインスタンスを保持します。そして、戻るとすぐに、そのView Controllerがスタックから削除され、それに割り当てられたメモリが解放されます。

使用される構文-

ビューコントローラをプッシュします-

[self.navigationController pushViewController:myViewController animated:YES];
[myViewController release];//at the time of push we add this release statement.

これで、ポップを実行すると、そのdeallocメソッドが呼び出され、これがスタックから削除されます。

[self.navigationController popViewControllerAnimated:YES];//That view is release from navigation stack

これがあなたの疑問を解消することを願っています。詳細については、この開発者ページを確認してください-http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html

于 2012-05-12T12:36:08.193 に答える