2012-01-27 12 views
6

私は奇妙な状況があります。私はかなり記憶力の強いプロセス(画像処理)を実行していますが、すべてのキンクを取り除き、99%の時間で正常に動作します。iOSアプリケーションはバックグラウンドから復帰した後にメモリ警告からクラッシュしますが、以前は復帰していませんか?

しかし、私がアプリを非アクティブ状態またはバックグラウンド状態にすると、戻って同じプロセスを実行しようとするとメモリ警告が表示され、アプリがクラッシュします。

私は、2つのユースケースでメモリフットプリントを分析するために計測器を使用しました。メモリフットプリントはまったく同じです。しかし、アプリケーションをバックグラウンド(または非アクティブ)にしないと、メモリエラーが発生せず、正常終了します。バックグラウンド(または非アクティブ)に置かれたユースケースでは、メモリエラーが発生し、クラッシュします。

誰でもこれに関する情報はありますか?私はこれを把握しようとするネット/ irc /スタック/リンゴのドキュメントを精練しています。リンゴ(iOS)は、バックグラウンドから復帰した後、私のアプリが実行できるメモリ量を減らしていますか?これを防ぐ方法はありますか?または、私はもう少し簡単な解決策を見落としていますか?

+0

あなたの質問にエラーメッセージを追加してください。 – mit3z

+0

クラッシュの原因となるメモリー不足のエラーですので、エラーメッセージはありません。 –

+0

フォアグラウンドに出入りするときにあなたのアプリケーションデリゲートメソッドで何かしますか、辞任する/アクティブになるのですか? – jrturton

答えて

2

これはわかりました - iOSは何もばかげていませんでした。開発者でした:)私のプロジェクトには、メモリを割り当てるなど、バックグラウンドから戻るときに何かかかったコンポーネントがありました。しかし、このビューはアクティブではなかったので、必要なメモリを割り当てることは役に立たないことが判明しました。コードを掃除した後、私はメモリエラーに遭遇しませんでした。

0

おそらく、あなたのアプリがバックグラウンドでながら、メモリの警告を受けている、とこれに対する回答は異なっている(メモリリークがない、注意してください):例えば、バックグラウンドですべてのビューコントローラを持つことができ、そのメモリ警告が受信されたときにコンテンツがアンロードされますが、フォアグラウンドでは、アクティブなView Controllerはアンロードされません。ビューコントローラーまたはそのオブジェクトの1つが、メモリー不足の警告に応答しない他のプロセスの代理人に設定されているとすると、割り振り解除されたインスタンスにメッセージを送信する可能性があります。

あなたは本当に含めるべきクラッシュの詳細を知っていて、アプリの構造についてはこれが私の最高の推測です。

+0

バックグラウンドでメモリエラーが発生せず、アプリケーションを再開するとビューがすべて読み込まれます。しかし、画像の処理を開始するために私のアプリケーションで "go"を押すと、メモリーが足りなくなるためクラッシュしますが、バックグラウンドから戻るとクラッシュします。 –

+0

(私もこれでスポンジーで働いています)そうです、問題は、アプリがバックグラウンドでクラッシュしているのではなく、フォアグランドに戻ってきます。問題は、次に使用するときですメモリ不足のためクラッシュするアプリ。私たちがまったく同じ動作をしているが、速いアプリケーションの切り替えを最初に外すと、それはうまく動作し、単一の警告ではない。 – Shizam

+0

あなたのアプリはメモリ不足の警告にどのように反応しますか?あなたは何を取り除きますか? – jrturton

2

ちょうどチェックのために、バックグラウンドプロセスを開始している間、オートリリースプールに置く必要があります。バックグラウンドプロセスはメインスレッドと並行して実行されています。したがって、バックグラウンドでタスクを実行している間は、メモリを調べる必要があります。これは、漏れの原因となることが多い一般的なエラーです。また、UIKitを扱う操作は常にメインスレッド上で実行されます。だから、背景を介して任意のデータを処理する場合は、&それはUI上に表示したい場合、それはメインスレッドにロードされます。

関連する問題