問題タブ [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.
iphone - didReceiveMemoryWarningは呼び出されましたが、viewDidUnloadは呼び出されませんでしたか?
didReceiveMemoryWarningが呼び出されているのに、viewDidUnloadが呼び出されていないという状況が発生しています。didReceiveMemoryWarningのドキュメントには次のように書かれています。
このメソッドのデフォルトの実装は、ViewControllerがそのビューを安全に解放できるかどうかを確認します。これは、ビュー自体にスーパービューがなく、nibファイルから、またはカスタムのloadViewメソッドを使用して再ロードできる場合に可能です。ビューを解放できる場合、このメソッドはビューを解放し、viewDidUnloadメソッドを呼び出します。
ビューコントローラはその時点では表示されていませんが、モーダルの親です(通常、メモリ警告が発生したときにイメージピッカーの下にあります)。ビューはリリースできるはずのようですが、何かが足りないのかもしれません。
これが重要な理由は、ビューがリロードされたときにviewDidLoadが呼び出されることを前提として、didReceiveMemoryWarningにキャッシュされたデータを解放しているためです。ただし、viewDidUnloadが呼び出されていないため、ビューが再度表示されているときにviewDidLoadも呼び出されません...
iphone - webviewiphoneをロードするときにメモリ警告レベル2を取得するアプリケーション
私のアプリケーションにはテーブルビューがあり、クリックすると2つのセルが表示され、Webビューが起動しますが、アプリケーションがクラッシュし、Webビューが読み込まれる前でもメモリ警告レベル2が表示されます。ほとんどのメモリリークをクリアしました。このメモリ警告にどのように対応する必要がありますか?
彼らは私が不要なビューをアンロードする必要があると言います。ここで少し混乱しています。ここでWebビュー、テーブルビューをアンロードする必要がありますか?
誰か助けてもらえますか?
よろしくお願いします。
iphone - didRecieveMemoryWarningで一番下に
didRecieveMemoryWarningメソッドを使用して一番下に移動する必要があります。私はこのフォーラムでこのトピックについて30のスレッドのように読みました。そして、すべての答えは異なります。
最初の質問。didRecieveMemoryWarningでオブジェクトを解放する必要がありますか、それとも単にnilに設定する必要がありますか?または両方?
私は、didRecieveMemoryWarningメソッドでtableViewデータソースがある場合はそれを解放する必要があることを読みました。また、このメソッドでIBOutletsをリリースする必要があることも読みました。私は混乱しています、ここで何が正しいのですか?
viewDidLoadで開始したオブジェクトだけがdidRecieveMemoryWarningでリリースする必要がありますか?
labelTitleText.text = @"Woodie Guthrie"
それとも、私が割り当てたばかりのプロパティですか。たとえば、次のようになります。labelTitleTextは私のヘッダーファイルのプロパティです。
今日の私のアプリケーションでは、dealloc
メソッド内のすべて(上記の例のように割り当てられたラベルも)をリリースします。これは正しくないと思います。
理解しやすくなるように、小さなコード例を本当にいただければ幸いです。これは、他のスレッドに欠けているものです。
みなさん、良い一日を!
ios - メモリ警告を受け取ったときにiPhoneアプリケーションがクラッシュするのはなぜですか?
これは私にとって一種の謎です。私のアプリケーションはあまりメモリを使用しませんが、バックグラウンドに置いてメモリを大量に消費するアプリケーションをできるだけ多く実行すると、アプリケーションを起動しようとするとクラッシュすることがあります。
クラッシュログを確認しましたが、これが表示されます。
ご覧のとおり、MailboxViewController
ViewControllerはdidReceiveMemoryWarning
メッセージを受け取ります。そのビューには実際に解放できるメモリがないため、を呼び出すだけ[super didReceiveMemoryWarning]
です。
奇妙なことに、ViewControllerのへの呼び出しが表示されませんviewDidUnload
。そこに到達する前に、「EXC_BAD_ACCESS(SIGSEGV)」でクラッシュするようです。
何が起こっているのですか、どうすれば修正できますか?
iphone - 親を参照するビューを含むビューコントローラの割り当てを解除する方法
ここに興味深い問題があります。私はビューコントローラーを持っています。それをMyViewControllerと呼びましょう。そのメンバーの1つはカスタムビューです。それをMyCustomViewと呼びましょう。MyViewControllerはカスタムビューのデリゲートとして使用されるため、MyCustomViewにはその親であるMyViewControllerへの参照もあります。この問題は、メモリ警告などが原因でMyViewControllerがアンロードされたときに発生します。これが何が起こるかです:
まず、MyViewControllerに対してviewDidUnloadが呼び出されます。これは次のようになります。
self.myCustomView = nilが実行されると、myCustomViewの割り当てが解除されます。MyCustomViewのdeallocルーチンは次のようになります。
上から、デリゲートがMyViewControllerであることを思い出してください。MyCustomViewが最初にリリースされた場合、MyViewControllerの参照数は1より大きいため、これは問題にはなりませんが、この場合、MyViewControllerには他の参照がありません。これにより、MyViewControllerが解放されます。つまり、deallocルーチンが呼び出され、次のようになります。
ご覧のとおり、MyViewControllerのメンバー、つまり「somedata」は、MyViewControllerのviewDidUnloadルーチンが完了する前にリリースされます。MyViewControllerとMyCustomViewのdeallocルーチンが完了し、viewDidUnloadルーチンの終了に戻ると、次の行に移動します。
現在、somedataはnilではありませんが、その値はすでにリリースされています。これにより例外が発生します。
これは、参照カウントの重大な欠陥のようです。このようなオブジェクトで、相互に割り当てを解除する双方向参照をどのように処理しますか?
1つの答えは、deallocルーチンでメンバーを常にnilに設定することです。私はその答えが好きではありません。これは多くの余分な作業であり、ほとんどの場合必要ではないはずです。もう1つの答えは、viewDidUnloadの順序を並べ替えて、後方ポインターを持つ可能性のある子オブジェクトの割り当て解除が常に最後に行われるようにすることです。私もこの解決策が好きではなく、それは時々うまくいかないかもしれません。
この問題をどのように回避しますか?
iphone - iPhoneのメモリ管理、複数のデバイスでアプリをクラッシュプルーフにします
UIScrollViewを使用して、検索条件に基づいて画像のリストを表示するアプリを開発しています。ボタンを使用すると、ユーザーはより多くの画像を読み込むことができます。
iPhone 4でテストすると、ViewControllerは最大750枚の画像でメモリ警告を受け取ります。iPodの第2世代でテストすると、約150枚の画像でメモリ警告が表示されます。
私の理解では、didReceiveMemoryWarningが呼び出されると、オブジェクトを解放することでメモリを解放できますが、メモリ不足からの回復は保証されません。
didReceiveMemoryWarningを実装し、基本的にすべてのオブジェクトをリリースしました。機器では、メモリ使用量が約3MBに低下します。iPodが初めてメモリ制限に達すると、すべてがうまくいき、メモリが解放され、アプリは通常の動作を再開します。ただし、2回目にdidReceiveMemoryWarningを呼び出すと、解放されたオブジェクトを確認できますが、とにかくアプリがクラッシュします。
では、どうすればアプリをクラッシュプルーフにすることができますか?アプリを実行しているすべてのデバイスがメモリが許す限り多くの画像をロードできることを確認したいのですが、アプリがクラッシュしないことも確認したいと思います。
アプリがdidReceiveMemoryWarningに到達せず、表示できる画像の数に制限を設定したいのですが、各デバイスがロードできる画像の数をどのように決定できますか?
また、画像のサイズは保証されません。テスト中に、iPodでこの任意の数の150に到達しましたが、ある時点でサーバー上の画像が2倍の大きさである場合はどうなりますか?その場合、アプリはおそらく75枚の画像でクラッシュします。
何か疑惑はありますか?
objective-c - didReceiveMemoryWarning - 警告レベルを区別する方法
didReceiveMemoryWarning の 2 つのメモリ警告レベルを区別するにはどうすればよいですか?
何が起こっているかをユーザーに警告したいのですが、レベル 2 (より重要) の場合のみです。誰もこれをコーディングする方法を知っていますか?
ありがとう!
iphone - UIScrollView での iPhone メモリ警告の問題
私は、ユーザーが多数の画像 (通常、1 つの水平スクロール ビューで約 20 個の .jpg ファイル) をスクロールできる iPad アプリに取り組んでいます。ファイルサイズはそれぞれ約200kbです。ユーザーがボタンをクリックして画像を保存できるようにしたかったので、画像は UIButton の「Background」プロパティとして設定されています。アプリを実行するたびに、しばらくスクロールするとクラッシュします。スクロールしない場合は、正常に動作します。パフォーマンス ツールを使用してアプリを実行しましたが、リークは見つかりませんでした。
アプリがクラッシュする直前に、"Level=1" というメモリ警告が表示されます。スクロールビューで約8枚の画像で実行しましたが、問題はありませんでした。だから私はそれがscrollViewと画像/ボタンと関係があることを知っています。「viewDidLoad」メソッドでは、次のようにして scrollView をセットアップし、Interface Builder にリンクしました。
これを機能させる方法についてのアイデアはありますか? Interface Builder のボタンに画像を直接追加しました。背景画像を削除し、代わりに「viewDidLoad」メソッドで背景を設定すると役に立ちますか? どんな助けでも大歓迎です。
ios - didReceiveMemoryWarningによってリリースされた後、iOSがNibからロードされたビューを自動回転しないのはなぜですか?
私のiPadアプリは、自動回転を多用しています。これは素晴らしい。ただし、(ここでdidReceiveMemoryWarning
説明するように)のデフォルトの実装によって非表示のビューが解放された場合、ビューがペン先から再ロードされ、たまたま横向きになっていると、縦向きにロードされることに気付きました。これは、iPadを手動で回転させて、適切な方向に移動させるまで、インターフェイスに大混乱をもたらします。
私は、iOSが現在の向きでビューをロードすると想定していました。これは、アプリの起動時に実行されることです。しかし、それは違います。によってアンロードされた後ではありませんdidReceiveMemoryWarning
。なぜだめですか?そして、どうすればそれを行うことができますか?
ios - didReceiveMemoryWarning、レベル 2、使用量は 3MB のみ
私の iPad アプリケーションには、リストの選択に応じて選択される多数のナビゲーション コントローラがあります (タブ バー コントローラの動作に少し似ています。または、Apple Remote アプリケーションを参照して Radio を選択すると、アイデアが得られるはずです)。
これらの各ナビゲーション コントローラーの最大深度を 50 に制限しました。また、表示されていないビュー コントローラーの不要な RAM 使用量を定期的に、または didReceiveMemoryWarning を受け取ったときにクリーンアップします。
計測器を使用すると、メモリ使用量が 3.5MB を超えません。
合計で約 75 個のコントローラーをナビゲーション コントローラーにプッシュすると、レベル 2 の警告が表示され、アプリケーションが終了します。
どうしてこれなの?私はそれについて何ができますか?