3

「メモリ不足」のために iPhone OS によってイジェクトされるアプリケーションがあります。

インストゥルメントを介して渡しましたが、リークはゼロで、メモリ使用量は約 640 kb です。

画面にオブジェクトを追加すると、アプリケーションがクラッシュします。

これが仕組みです。非常に単純で、オブジェクトにいくつかのプロパティを追加する UIImageView ベースのクラスがあります。このクラスは、作成されたオブジェクトで使用されます。

ユーザーがボタンをタップすると、そのクラスの新しいイメージが作成され、self.view に追加されます。

約 15 個のオブジェクトが追加されると、メモリ不足の警告が表示されてアプリケーションが終了します。

計測器は、重要なメモリ使用量を報告しません。15 個のオブジェクトが追加された後でも、ALL ALLOCATIONS エントリが 660 kb を超えることはありません。各オブジェクトは、5 つの 120x120 ピクセルの画像のうちの 1 つです。

オブジェクトの割り当てやリークではない場合、それは何でしょうか? 問題を特定するためにどのような指示に従うべきか教えてください。

助けてくれてありがとう。

4

3 に答える 3

6

ObjectAlloc 計測器は、アプリケーション内のすべてのメモリ使用量を示すわけではありません。ビューやその他のビジュアル要素は ObjectAlloc でフル サイズを表示しないため、メモリ モニター インストゥルメントを使用して、アプリケーションの実際のメモリ サイズをいつでも確認できます。

また、Instruments がリークを報告しないからといって、リークが存在しないというわけではありません。Clang Static Analyzer を使用してアプリケーションを実行し、潜在的なメモリ リークをもう一度調べます (Xcode 3.2 でビルド | ビルドと分析を使用するか、スタンドアロン ツールをダウンロードします)。繰り返しますが、これがパスしてもメモリ消費量が増加し続けている場合でも、どこかにリークがあります。

コメントでQuartz描画の使用について言及しています。Quartz で使用される Core Foundation オブジェクトも特定のメモリ管理モデルに従うことを覚えておく必要があります。このモデルではCreate、名前に を含む関数で作成したものはすべて、 のような一致する関数を使用して解放する必要がありますCFRelease()。これを忘れるとリークとして表示されない場合がありますが、そうです。

于 2010-02-23T13:44:05.690 に答える
1

リークはあなたの問題ではありません。過剰保持です。

オブジェクトの割り当てを見てください。そのグラフが上昇するだけで、アプリは強制終了されます。iPhoneを特に怒らせるのは、メモリを解放するように言われ(メモリ不足の警告)、メモリが解放されない場合です。あなたのコードはこれの極端なケースかもしれませんが、このメッセージを受け取ったら何かを解放する必要があります。

于 2010-02-23T02:01:35.717 に答える
-6

問題が私のコードとは何の関係もないことを発見しました。iPhone でクォーツを使用するたびに、この種の問題が発生します。

Quartz には、修正しなければならない深刻な問題があります。私が検出した限り、描画を実行するためにメモリのチャンクを取得し、使用するすべての変数と参照を解放しても解放しません。すべての変数を nil にしても。

Quartz はメモリを消費し、クラッシュの原因となります。

以下は、Quartz がプロジェクトをクラッシュさせる方法を示すために作成したプロジェクトです。MyClass.m 内で imageWithBorderFromImage と呼ばれるメソッドを探します。この方法では、クオーツを使用して、オブジェクトの周囲に破線の境界線を描画します。プロジェクトを実行し、ボタンを数回クリックします。クリックするたびに、前のオブジェクトの上に新しいオブジェクトが画面に追加されます。約 20 回クリックすると、アプリケーションはスプリングボードによって排出されます。その前に、コンソールに LOW MEMORY 警告が表示されます。

作成されたビューが多すぎることが問題だと言う前に、クォーツ メソッドを無効にして、アプリケーションがクラッシュしなくなったことを確認してください。実際には 80 回クリックでき、まだクリックを続けることができましたが、アプリを停止しました。

プロジェクトQuartzNightmareのダウンロードはこちら

于 2010-02-22T23:16:04.963 に答える