問題タブ [didreceivememorywarning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
384 参照

ios - 一部のビューコントローラがdidReceiveMemoryWarningを受け取らないのはなぜですか?

私のiPadアプリケーションのルートレベルのビューコントローラーはUISplitViewControllerです。したがって、2つのビューコントローラがあります。

  • 1つのマスタービューコントローラー(viewControllersプロパティの項目0)
  • 1つの詳細ビューコントローラー(viewControllersプロパティの項目1)

詳細ビューコントローラーは、マスタービューコントローラーのタップとイベントに応じて変更するカスタムビューコントローラーです。

この詳細ビューコントローラーを変更するには、次のコードを使用します。

私の問題は、アプリがメモリ警告イベントを受信すると、以前の詳細ビューコントローラーを除くdidReceiveMemoryWarningすべてのビューコントローラーに対してメソッドが呼び出されることです。また、他のオブジェクト(まだ実行されている可能性のある非同期メソッドを含む)のデリゲートであるため、割り当てが解除されていません。

私の質問は:

  • UIViewControllerがdidReceiveMemoryWarningメッセージを受信するためのルールは何ですか?以前の詳細ビューコントローラーがそれらを受け取らないのはなぜですか?
  • これらの古いビューコントローラを安全に呼び出すことはできますdidReceiveMemoryWarningか?viewDidUnload
0 投票する
1 に答える
747 参照

ios - didReceiveMemoryWarning の後に iOS UITableView が空白になる

私はここで少し途方に暮れています。どこが間違っているのか誰かが指摘してくれることを願っています。

私のアプリケーションは、iPad 用のマスター/ビュー アプリケーションです。

私の MasterView は UITableView を継承しており、didReceiveMemoryWarning がない限り問題なく動作します。カスタム セル コンテンツを取得しましたが、すべてうまく機能します。ここまでは順調で、ビルドに数時間しかかかりませんでした。

ただし、didReceiveMemoryWarning を取得すると、self.tableView の動作がおかしいようです。numberOfSectionsInTableView および tableView:numberOfRowsInSection: メソッドが再度呼び出されることはなく、コードが最初の項目を選択しようとすると (メモリ警告の後)、次のようになります。

でクラッシュします

-[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]: 行 (0) がセクション (0) の境界 (0) を超えています。

それで、何が得られますか?メモリ警告中に tableView のメモリが完全に消去された場合、なぜ nil に設定されなかったのですか? また、どうすればそれを再び構築できますか?

0 投票する
2 に答える
3324 参照

iphone - iPhone - メモリ不足の状態に対処する方法

アプリがメモリ不足の警告メッセージを受け取ると、次の 3 つの状況が発生する可能性があります。

  1. アプリが起動されたばかりで、ユーザーが特別なことをしていない
  2. アプリが実行中で、現在のコンテキストがある
  3. アプリは実行中のコンテキストでバックグラウンドにあります

したがって、このメッセージを受け取ったら、メモリを解放する必要があります...しかし、どこで? そしてどうやって ?

という事は承知しています :

  1. initWith..... デフォルトの静的値を設定する必要があります。
  2. viewDidLoad非静的オブジェクトをロードする必要があります
  3. didReceiveMemoryWarningこれらの非静的オブジェクトを解放する必要があります
  4. 何ができるか、何をしなければならないかわかりませんviewDidUnload...

いくつかの保持された値は、どこかで nil に設定する必要があると思います... didReceiveMemoryWarning で?

そして、アクティブなコンテキスト (画面の物の位置、表示されたテキストなど) で何をしなければならないので、viewDidLoad が再度呼び出されると、それらは memoryWarning 呼び出しの前の場所に再び表示されますか?

つまり、2 つのシナリオを想像してください。

シナリオ 1

  1. あなたは何かに取り組んでいます... フィールドにテキストを書きましたが、それを保存せず、別のビューを開き、画面上のビューを移動しました。
  2. アプリをバックグラウンドで送信します。
  3. 次に、memoryWarning がアプリに送信されます。
  4. その後、ユーザーはアプリをフォアグラウンドに送信します。以前のビューと同じように、現在のビューで終了時のように表示する必要がありますが、すべてが解放されている場合、どうすればこれを行うことができますか?

シナリオ 2

  1. あなたは何かに取り組んでいます... フィールドにテキストを書きましたが、それを保存せず、別のビューを開き、画面上のビューを移動しました。
  2. 次に、memoryWarning がアプリに送信されます。
  3. ビューにあるものや、前のビューにあったものを失いたくありません。リリース/リロード機能のために画面がちらつきたくありません。これにどう対処しますか?

これらのメモリ警告が発生した場合、ディスクに書き込んで後で表示する以外に選択肢はありますか?

そして、いつそれらを再度ロードしますか?ロード (viewDidLoad) し、memoryWarning を受け取り、アンロード (viewDidUnload) する viewController がありますが、それに戻ると、viewDidLoad は再度呼び出されませんか? これは viewWillAppear で行う必要がありますか? viewWillAppear がトリガーされるたびに、そこに表示されるはずのものが読み込まれていると考える必要がありますか?

貴重なリンクがあっても、どんな助けも素晴らしいでしょう!

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

0 投票する
2 に答える
2113 参照

ios - ARC での UIDatePicker メモリ リーク

UIDatePicker コントロールを備えたいくつかのビュー コントローラーを持つアプリを作成しています。

多くのメモリ警告が表示された後、原因について多くのデバッグを行いました。計測器を使用して、UIDatePicker を含むビュー コントローラーが表示されるたびに、メモリ使用量が 2 ~ 3 MB 増加することを確認できました。最終的に、これはメモリ警告につながります。ここでできることはたくさんあり、これらの関数を書き直してからクラッシュが劇的に減少しましたが、私はまだこの動作に慣れておらず、修正したいと考えています。

UIDatePicker は XIB ファイルの一部です。それらをXIBから取り出し、プログラムで追加しようとしました。これでは問題は解決しません。また、(スレッドセーフな)シングルトンを使用してみました。これにより、メモリ使用量が 1 つのインスタンスのみに制限されます(メモリ使用量が増加しないため)が、可能な限りシングルトンを回避しようとしています。シングルトンを使用しますか?

iOS 5 および 4.3 で、それを実行するすべてのデバイスでこの動作が見られます。タイトルが示すように、私はARCを使用しています。

Instruments では、メモリ リークは表示されません。

以下は、Instruments のスクリーンショットです。使用率が上がるたびに、日付ピッカーを含む VC が表示されます。グラフの開始時のベースラインは、2.3MB のメモリ使用量です。

http://i.stack.imgur.com/1S7ns.png

乾杯!

0 投票する
2 に答える
367 参照

ios - didReceiveMemoryWarning を受信した場合、UIImageViewController のデリゲートは nil です

UIImagePickerController が制御しているときにアプリケーションが didReceiveMemoryWarning を取得すると、ピッカー (およびピッカーのデリゲート) が割り当て解除されたビューコントローラーに設定される理由を理解しようとしています。

View Controller one 呼び出し

次に、UIImageViewController を表示し、画像を選択します。次に、メモリ警告をシミュレートします。ダイアログを表示したビュー コントローラーでメモリ警告エラーが発生し、ピッカーが 0x0 に設定されます (これは、デリゲートも無効になったことを意味します)。

ARCを使用しています。UIImageViewController が呼び出される方法が変更されたため、表示されたビューが再ロードされず、UIImageViewController へのポインターが無効になりましたか?

0 投票する
0 に答える
897 参照

ios - didReceiveMemoryWarning および viewDidUnload の後に viewDidLoad を使用する

meory 警告が発生したときにビューを管理するプロセスを理解しようとしています。この回答でいくつかの良い情報を受け取りましたが、まだ質問があります。

ビューコントローラーVC2(そのサブビューはビュープロパティです)によって管理されるサブビューを含むビューコントローラーVC1があるとします。最初に、VC2 ビューを別の VC1 ビューに入れたい場合は、次のようにします。

しばらくして、VC2 でメモリ警告が受信されます。したがって、VC2 の didReceiveMemoryWarning が呼び出され、続いて VC2 の viewDidUnload が呼び出されます。

これが私の理解の終わりです(私がすでに言ったことが正しいなら!)

私が魔法のように起こると期待しているのは、VC2 のビューとそのリソースを解放できることです (たとえば、タブ バー コントローラーが参照しているが、現在は表示されていない 1 つのビューである可能性があります)。 VC2 の viewDidLoad メソッドですべて再作成できます。VC2の見解が当面見えないとすれば、解放されるはずだ。

どのように、正確にリリースされますか?didReceiveMemoryWarning は VC2 で実行されます。VC2 は独自のビューをリリースしますか? そうでない場合、何が起こると考えられますか。

2 番目の質問です。VC2 のビューが解放された場合、そのビューが再び必要になるとします (誰かがタブ バーの対応するタブを選択するなど)。私の理解では、VC2 のビュー プロパティが参照されると、VC2 loadView が呼び出されます。最初は、VC1 がプロパティ参照を使用してサブビューとして追加したときに参照されました。タブバーコントローラーは、タブバーコントローラーのviewControllers配列にあるビューコントローラーVC2を介して参照によって呼び出すことができます。したがって、タブバーコントローラーはビュープロパティを参照し、VC2 loadView が呼び出されると思います。

2 番目の質問について説明しましたが、同時に回答した可能性もあります。私がこれを正しく理解しているかどうか誰かが確認できますか?

また、(最初の質問のように) VC2 ビューをどこでどのようにリリースする必要があるのか​​、まだ明確ではありません。

メモリ警告に応答してビューとビュー階層を解放するこのプロセス全体を説明し、解放されたビューが必要なときにどのように再構成されるかを説明するチュートリアルはありますか? それは、このプロセスを理解するのに本当に役立ちます。

0 投票する
1 に答える
726 参照

iphone - メモリ警告でモーダル ビュー コントローラが閉じられましたか?

アプリで発生する断続的なバグがあり、特定のシナリオでメモリ警告をシミュレートすることで、最終的に一貫して再現することができました。これがセットアップです。

モーダル コントローラー 2 が画面に表示されているときにメモリ警告をシミュレートすると、モーダル コントローラー 1 が閉じられ、一番下のナビゲーション コントローラーがルートに戻ります。これはまさに、報告されたバグで起こっていることです。

その後、ユーザーが MC2 で [完了] ボタンを押すと、MC1 のデリゲート メソッドが呼び出されます。これは、メモリ警告によって MC1 がアンロードされ、割り当てが解除されたため、クラッシュします。

アプリには、モーダル ビュー コントローラーのチェーンを提示するナビゲーション コントローラーがある場所が他にもありますが、メモリ警告をトリガーすると、アプリの特定の領域でのみこの問題が発生します。

この動作を引き起こす可能性のあるものはありますか? 問題の原因となっているコードがわからないため、特定のコード サンプルはありません。任意のポインタをいただければ幸いです。

0 投票する
2 に答える
1122 参照

iphone - iOS 5はメモリ不足の状況を異なる方法で処理しますか?

iOS 5.0でのみ問題が発生し、モーダルビューが表示されているときにメモリ不足の警告が表示されると、白い画面が表示されることがあります。これは、タブバーコントローラーがすべてのビューを解放するために発生すると思います。

同じシナリオでiOS4.0に問題が発生することはありません。私が考えることができる2つの説明があります:

  1. iOS 5はより多くのRAMを使用し、アプリの残りは少なくなります
  2. iOS 5は、メモリ不足の状況を異なる方法で処理します

5.0より前のバージョンでは、追加のメモリを解放することで、メモリ不足の警告に応答できました。5.0では、メモリ不足の警告が初めて表示されたようですが、モーダルビューコントローラの下にあるすべてのものがそのビューをクリアします。トレースにより、メモリ警告の後、モーダルビューコントローラの下にあるすべてのコントローラのviewフィールドがに設定されていることが確認されnilます。

iOS 5が以前のバージョンと比較してメモリ不足の状況をどのように処理するかについての情報(理想的にはAppleから)を誰かに教えてもらえますか?すべてのビューをクリアするのではなく、必要に応じてメモリを解放できるようにしたいと思います。

0 投票する
2 に答える
1640 参照

objective-c - ビューコントローラが表示されているときに didReceiveMemoryWarning / viewDidUnload が呼び出されますか?

didReceiveMemoryWarning/に関する質問viewDidUnloadです。

アプリに多くのビュー コントローラーがある場合、そのうちの 1 つが表示され、他のビュー コントローラーが表示されます (ナビゲーション コントローラーまたはタブ バー コントローラーを使用しているため、問題ではありませんdidReceiveMemoryWarning) viewDidUnload。 、または表示のみ?

表示されている VC が受信する可能性はありますが、受信didReceiveMemoryWarningしない可能性はありますかviewDidUnload(表示されているように意味がないため)。

ところで、この図を見て、次のような質問があります。 UIViewController の init/dealloc フローチャート

助けてくれてどうもありがとう。

0 投票する
1 に答える
1475 参照

ios - iOSメモリ警告を処理する

UIViewControllerモーダルビューコントローラーとして表示されるがあります。そのビューにはUITextView、4つのImageButton(CustomType付き)と、写真を撮ってそのボタンに表示できる別のボタン(Custom Typeもあります)があります。

問題は次のとおりです。

  1. にテキストを設定しUITextView、4つのImageButtonのそれぞれに画像があるとします。
  2. 次に、を起動するUIImagePickerControllerと、メモリ警告(通常は何が発生するか)が表示されるのでdidReceiveMemoryWarning、呼び出されてviewDidUnloadになります。
  3. すべての情報から戻ると、UIImagePickerControllerすべての情報がクリーンアップされるため、ユーザーはすべてを再入力する必要があります(ボタンに4枚の写真を設定します)。

したがって、問題は、ユーザーがすべてを再入力することを回避するために、この状況をどのように処理する必要があるかということです。状態をUserDefaultsに保存するか、古い情報をのプロパティに保存する必要があるので、が再度呼び出されUIViewControllerたときにそれらを使用しますか?viewDidLoad

ありがとう!