1

非常に長いiOSアプリケーションのフェーズを管理するために使用NSOperationQueueしているため、非同期で管理したいと考えています。そのフェーズでは、calloc関数を直接使用して、C で大きな配列を割り当てます。大きなとは、1024x256 の 2 次元配列の float などを意味します。

計算中にアプリがロックアップするよりもすべてがメインスレッドに存在する場合、すべてがうまくいきますが、代わりに重い部分をに移動すると、NSInvocationOperation多くの奇妙な結果が得られ、デバッガーを使用すると、コンソールに奇妙なメッセージが表示されることがあります

現在、プログラムに使用できるメモリがありません: malloc を呼び出すのは安全ではありません

そのため、操作キューによって管理されるスレッドにメインスレッドと比較していくつかの異なる制限があるかどうか、またこの問題を回避するにはどうすればよいかを考えていました。

4

1 に答える 1

1

私が知っている制限はありません..しかし、利用可能なRAMの限界に達している可能性があります. iOS は仮想メモリを実行しないため、メモリが少なくなると、他のアプリに警告を送信して RAM を解放します。それが問題の原因である可能性があります。

計測器を使用して、使用している RAM の量をプロファイリングします。約 20MB を超える場合は、とにかくメモリの使用量が多すぎるために終了する危険があります。

于 2011-07-08T23:46:52.303 に答える