問題タブ [memory-warning]

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 に答える
2577 参照

java - メモリが少なくなったときに Java アプリケーションに自動的に警告する優れた方法は何ですか?

空きメモリが特定のしきい値に達したときに Java アプリケーションにメモリ警告を自動的に発生させるエレガントな方法はありますか?

これは私がすでに答えを持っているジェパディ スタイルの質問であることに注意してください。解決策が私を大いに助けたので、世界が発見できるようにここに投稿したかっただけです。

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

objective-c - メモリ警告なしで複数のローカル イメージを読み込む

まあ、メモリ管理は私を夢中にさせます!

これが私の問題です:

画像への参照が n 個ある plist があります。私がやろうとしているのは、各子を取得して、ページングが有効になっている UIScrollView に追加された UIImageView にロードすることです。

私の問題:

  • n 個の画像があります。たったの 3 人かもしれませんが、60 人以上になるかもしれません。
  • ズーム可能なため、各画像はかなりの解像度 (1152x1536) です。

CATiledLayer について読み、PhotoScroller のサンプルを見ましたが、CATiledLayer を使用したくないのは、画像の一部を表示しているときにフェードインが作成され、私のプロジェクトではその効果が収まらないためです。

あなたの意見を聞きたいのですが、通常、この種のタスクをどのように解決しますか?

ここに私のコードの一部を残します:

このコードにより、たとえば 60 個の画像を読み込もうとすると、アプリがメモリ警告を受け取ります。

お分かりだと思いますよね?

助言がありますか?

事前にご協力いただきありがとうございます。

0 投票する
3 に答える
4800 参照

ios - カメラの UIImagePicker を使用すると、常にメモリ警告が表示されます

で を使用しUIImagePickerていますviewController

非常に有名な「wait_fences: failed to receive reply: 10004003」と同様に、常にメモリ警告が表示される 2 種類の方法があります。

しかし、警告を表示する特定のコード行をたどることはできません。これらのメソッドの直後に、デバッグできない場所に常に表示されます。

既にコードをチェックしましたが、メモリ リークの可能性はありませんでした。

写真の処理にはある程度のメモリが必要であることを知っているので、メモリ警告が表示されるのは正常です。

しかし、問題は時々、ナビゲーションスタックのparentViewコントローラーに戻るためのボタンなど、警告が表示されたときに重要なことですviewControllerrelease

そのため、ボタンやその他の重要なものがリリースされるのが早すぎる場合に、メモリ警告を受け取りたくありません。

それを修正する方法はありますか?

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

memory-leaks - UIImagePickerControllerのシングルトンクラスが役に立たない

プロジェクトにViewControllerがあり、2つの画像をクリックして、同じ画面に拡大縮小して表示する必要があります。サーバーに両方の画像をアップロードした後、このプロセスを繰り返すことができます。写真を撮るために私はUIImagePickerControllerを使用しています。写真を8回クリックすると、レベル1と2のメモリ警告が表示されます。

StackOverflowで関連する質問を参照したとき、それらのほとんどはUIImagePickerControllerをシングルトンオブジェクトにすることを提案しました。そこで、UIImagePickerControllerのサブクラスである新しいシングルトンクラスを作成しました。メインのViewControllerで、このカスタムクラスのオブジェクトを作成し、それを繰り返し使用しています。しかし残念ながら、これも役に立ちません。画像を8回クリックしても、まだメモリ警告が表示されます。

いくつかのスニペットも投稿する-

UIImagePickerControllerのサブクラスの作成-

シングルトンクラスの実装-

現在、メインのViewControllerクラスにあります-

私は何か間違ったことをしていますか?みんな助けてください!

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

ios - UINavigationController スタックで別のビューがその上にあるときに、メモリ警告の後に OpenGL でサポートされた UIView が表示されないのはなぜですか

CAEAGLLayer をサポートするサブクラスまたは UIView があります。このビューは全画面表示ではなく、コンテナー UIView のサブビューです。このコンテナーは、UINavigationController スタック内の UIViewController によって制御されます。スタックに新しいビューをプッシュしてポップすると、すべて問題なく、OpenGL ビューを表示して操作できます。ナビゲーション コントローラー スタックに別のビューをプッシュしてメモリ警告をトリガーし、そのビューをポップすると、OpenGL ビューはまだ存在し、その backgroundColor をレンダリングしますが、OpenGL コンテンツは表示されません。viewDidAppear で描画メソッドをトリガーすると、コンテンツが再描画されていることがわかります (デバッガーで描画メソッドをステップ実行でき、コンテキストが null でない、レイヤーが null でないなど)。しかし、presentRenderBuffer の呼び出し後に OpenGL コンテンツが表示されません。 :

明らかに、メモリ警告が発生したときに何かが解放されましたが、まだ UIView があり、EAGLContext を持つ CAEAGLLayer があります (少なくとも nil ではありません)。

おそらくそれらが解放されたと考えて、ビューが再表示されたときに描画する前に、フレームバッファーとレンダーバッファーを破棄して再作成しようとしました。

EAGLLayer.drawableProperties を設定して、kEAGLDrawablePropertyRetainedBacking キーを YES に設定してみました。

OpenGL コンテンツが表示されないのはなぜですか?

最後に 1 つ: GLKView を使用する必要があることはわかっていますが、iOS 4.2 をサポートする必要があります。

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

ios - 古い iPad で Cocos2D ゲームがクラッシュする

cocos2D でゲームを開発しました。以前は古い Ipad と新しい Ipad2 (両方とも IOS 5.0 に更新) でゲームをビルドして実行していました。GDB では、メモリ警告レベル 1 が表示され、未使用のスプライトとスプライトシートが自動的に解放されました。このため、古い iPad ではゲームがクラッシュしますが、新しい Ipad2では問題なく動作します。古い Ipad の問題は何ですか?

0 投票する
4 に答える
2182 参照

ios - iOS、メモリ不足が原因でアプリがクラッシュするかどうかを確認します

クラッシュの原因がメモリ不足であることを確認するにはどうすればよいですか?
クラッシュログに具体的なものはありますか? たぶん、いくつかのツールやライブラリを使用する必要がありますか?

更新: 私のアプリは大量のメモリを使用し、メモリ警告を受け取ります。メモリ使用量を減らすことは非常に困難です。時々メモリ警告のためにクラッシュします。しかし、他の理由でクラッシュしないようにしたいのです。
では、アプリのクラッシュの理由を確認するにはどうすればよいですか (毎回多くのメモリ警告を受け取ります)。

UPDATE2: アプリケーションには、多くの 3D グラフィックスと複雑な UI があり、テクスチャに多くのメモリを必要とします。お客様が「読み込み中...」の一時停止を望んでいない。バックグラウンドで非表示のテクスチャをアンロードすると、スムーズなアニメーションが得られません。

したがって、memory 以外にクラッシュの理由があるかどうかを検出する必要があります。

0 投票する
3 に答える
3639 参照

c# - MonoTouch: 低メモリのためにアプリが強制終了されました。なぜですか? ライブ バイト割り当て 5 MB 上

私の iPad アプリは MonoTouch で開発されています。これは、メモリ管理の地獄をすべて回避したかったためですが、そうではないようです。シミュレーターではすべて正常に動作しますが、デバイスでアプリをテストしたところ、いくつかのメモリ警告の後、OS によってすぐに強制終了されることがわかりました。私のアプリは単純な画像ブラウザーです。いくつかの PNG 画像を読み込み、UIScrollView 内のいくつかの UIViews を使用してそれらを表示し、タッチすると次または前の画像を読み込みます。シミュレーターでは問題なく動作します。しかし、約 6 ~ 11 個のイメージをロードおよびアンロードした後のデバイスでは、メモリ警告が表示され始め、突然プロセスが強制終了されます。すべてのインスタンス化サイクルを確認し、新しいイメージをロードする前にすべての参照を正しく削除しました。

そこで、Instruments を起動し、iPad でアプリのメモリ割り当てのプロファイリングを開始しました。そこで私は、ライブ バイトが約 5 ~ 9 MB しかないことを発見しました。それはLive Bytesです)それは殺されています!これは、私のアプリの Instruments プロファイリング セッションのスクリーンショットです。

モノタッチでのメモリ割り当ての問題を記録した機器のスクリーンショット

ヒープショット シーケンスは次のとおりです。

楽器での私のアプリのヒープショット

小さな漏れもありますが、犯人になるほど大きくはないと思います。これらはすべて、iOS 5.1 で UIScrollView をリリースする際の既知の問題である strdup からの 48 バイトのリークです。

ここに画像の説明を入力

すべてが正常に見え、割り当てられたライブ バイトがまだ 5 MB であっても、私のアプリの REAL メモリは指数関数的に増加してから、iPad では最大 50 MB まで、iPhone4S では最大 314 MB まで、メモリ モニタによって報告されます。

iPhone4S でのアプリのメモリ増加

問題がどこにあるのかを発見するための方法やユーティリティがあるかどうか、誰かが教えてくれますか? モノタッチガベージコレクタのバグですか?または、正しく処分していないオブジェクトがありますか? そして、プロファイラーでそれらを見つけるにはどうすればよいですか? コードを 2 日間チェックしましたが、すべて問題ないようです。

ロード/インスタンス化/破棄サイクルのコードは次のとおりです。

正しく破棄されていないオブジェクトをキャッチする方法はありますか? Instruments は、ライブ バイト数が少なく、リークがほぼゼロであると報告していますが、なぜデッド オブジェクトが破棄されないのでしょうか? アプリで数分間何も起こらなかったとしても、コードで明示的に呼び出しても、GC は機能していないようです。新しい実験的なガベージ コレクターも試してみましたが、アプリを強制終了するのはさらに悪く、より迅速です。

Xamarin Web サイトで、メモリ警告のトラブルシューティングや不適切な割り当ての追跡に関するガイドラインやステップバイステップ ガイドを見つけることができません。

どんな助けや提案も大歓迎です、ありがとう!

更新: 一部の画像と uiview のサイズと解像度を減らしました。Live Bytes は 9 MB から 5 MB に減少しましたが、メモリ警告が表示された後、アプリは依然として強制終了されます。

更新 2: ハビエルが提案したように、バックグラウンド タスクを削除して直接呼び出しを行ったところ、メモリ リークはなくなりました! MonoTouch ガベージ コレクターにバグがあり、UIImages が割り当てられ、別のスレッドで破棄されたときにメモリを収集できないようです。しかし今、スクロールすると私のアプリがひどく反応しなくなったので、別のスレッドでそれを行うための解決策を見つける必要があります! しかし、どのように?

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

objective-c - Objective-C のメモリにやさしい背景画像の方法

私は iPad アプリ (>30 ビュー / ページ) を持っています。各ビューには固有の背景があります。

問題:背景を設定する最良の方法は何ですか(メモリに優しい)

サブビューとして uiimageview "backgroundView" を追加するよりも良い方法はありますか?

バージョン1:

これは網膜スイッチに問題があるようです

バージョン 2:

バージョン 3:

バージョン 2 は正常に動作するようです。多分誰かが私に最善のアプローチとその理由を教えてくれます;)

ありがとうアレックス

0 投票する
3 に答える
1034 参照

ios - viewDidUnload は、xib ファイルのない alloc/init 初期化されたビューコントローラーに対して呼び出されませんでした

シミュレーターを介して iOS バージョンのメモリ警告をシミュレートするときにviewDidUnload、xib を使用せずに alloc/init を使用して初期化すると、メソッドが呼び出されないのはなぜですか? ViewControllerこのメソッドは呼び出されないようです。

xib ファイルを使用して alloc/initWithNibName 経由でコントローラーを作成すると、viewDidUnload メソッドが正常に呼び出されました。なぜそれが起こったのですか?すべてのviewcontrollersがメモリ警告を正常に処理するには、xibファイルが必要ですか?