1

iPhone OS 4.0 にアップグレードした後、アプリケーションを切り替えると、アプリケーションがクラッシュし始めました。アプリケーションがメモリ警告を受け取ると、同じ場所でアプリケーションがクラッシュします。

一部のオブジェクトは、メモリ警告が受信されたときに自動的に割り当て解除されたようで、割り当て解除されたオブジェクトを使用しようとすると、アプリケーションがクラッシュします。

オブジェクトの割り当てが解除されたかどうかをテストして、再割り当てできるようにすることはできますか?

4

3 に答える 3

6

割り当て解除後、オブジェクトは存在しなくなるため、特定のオブジェクトが割り当て解除されたかどうかをテストすることはできません。実行できる唯一のことは、別のオブジェクトからの疑わしいオブジェクトへの参照がまだnilでないかどうかをテストすることです。

ここでの問題は、割り当て解除自体ではなく、保持の管理ミスです。使用されなくなったとマークされたオブジェクトがあり、システムはシステムが必要とするオブジェクトを強制終了しています。メモリが少ないときに表示される唯一の理由は、システムが通常のサイクルを待つのではなく、すべてのリリースプールを即座に停止して排出することです。

必要なすべてのオブジェクトが適切に解放されないように、それらが適切に保持されていることを確認する必要があります。保持されたオブジェクトは、メモリが少ない状況でも割り当てが解除されません。

編集

低メモリクラッシュの最も一般的な原因は、ビューが表示されていない場合でも、ビューまたはビュー内のリソースが常に存在すると想定していることです。システムは、表示されていないビューとそのリソース(画像など)を低メモリで削除します。didReceiveMemoryWarningビューコントローラのを確認してください。

于 2010-06-30T13:25:36.403 に答える