1

ここに私の問題のコンテキストがあります.... ARCがオンになっているiPhoneアプリのターゲットとしてiOS 5を使用しています:

を持つアプリがありUINavigationControllerます。スタックには、一番上にプッシュされる複数のビューがあります。表示される最後のビューは、UIWebViewGoogle 画像を使用した Web サイトであり、ユーザーは画像を選択してUIImageView、ナビゲーション スタックの前のビューに戻すことができます。ユーザーは [戻る] を押してから、前のビューで [保存]UIBarButtonを押して、画像をデバイスにローカルに保存できます。スタックは次のようになります。

MainView -> DetailsViewUIBarButton (右上に保存あり) -> ImageDisplayView -> WebView (Google 画像 Web サイトが読み込まれている)

問題は、ユーザーが Google 画像モバイルの [View Full Image] ボタンを使用して Google 画像から大きな画像 (たとえば 5 MB の画像) を選択すると、メモリ警告がスローされ、その下のビューが解放されることです。そのため、ユーザーが [保存] ボタンを使用して DetailsView に戻ると、[保存] ボタンはなくなりました。と呼ばれているからdidReceiveMemoryWarningです。

だから私の質問は....

  1. 埋め込まれた UIWebView で 5MB の画像を表示するときにメモリ警告が呼び出されるのはなぜですか?

  2. メモリの警告が原因で問題 (UIBarButton ビューのドロップなど) がナビゲーション スタックの下部に発生しないようにするにはどうすればよいですか?

  3. iPhone アプリ内の Google 画像モバイルからフルサイズの画像を適切に取得するためのヒントやコツはありますか?

この問題を自分で試すUIWebViewには、空白のアプリを作成し、Google 画像 Web サイトをそのアプリにロードします。それをデバイスにインストールし (3GS 以下では問題の発生が早くなります)、完全な画像をブラウザにロードしたり、ブラウザからロードしたりするだけで、最終的にデバッグ コンソールに警告が表示されます。

4

1 に答える 1

4

「iOS でのメモリ不足の警告への対応」に関する iOS のドキュメントを確認してください。「ビュー コントローラーは、現在画面外にあるビューを自動的にパージします」と記載されています。 また、「ビュー コントローラーのライフ サイクル」も参照してください。ビュー コントローラは、viewWillUnload: および viewDidUnload: メッセージを受け取ります。次に必要になったときに、loadView (ストーリーボードを使用していない場合) などを使用してビューを再作成する必要があります。

具体的にあなたの質問に答える:

  1. メモリが必要なのに利用できない場合、メモリ警告が生成されます。1 バイトが必要であっても、警告がトリガーされる可能性があります。これは、必要な量によって異なります。
  2. ビュー削除されます。それらを再作成するのはあなたの責任です。それらを再作成する方法は、それらが最初にどのように作成されたかによって異なります (プログラムによって、nib ファイルによって、ストーリーボードによって)。
  3. 画像は正常に取得されているようですが、メモリ不足の警告に対処する必要があります。
于 2012-04-17T22:48:50.197 に答える