1

プロジェクトからリークを取り除き終えたばかりですが、カテゴリ「GeneralBlock-0」にはまだ何千ものオブジェクトがあります。正味の割り当ての数は屋根を通り抜けています (私が入力すると 100 万に近づいています) が、どれもリークではなく、サイズが 0 バイトを超えるものもありません。

更新と編集:

QuartzCore は、問題のあるすべてのオブジェクトに対して責任があります。

責任のある呼び出し元は次のとおりです (ゲーム ループの反復ごとの実行順:

-[CALayer setPosition:]
x_hash_table_new_  // x2
hash_table_modify
-[CALayer setPosition:] // x9
-[CALayer(CALayerPrivate)_copyRenderLayer:flags:] //x13

デバイスで実行すると、48 バイト サイズのオブジェクトが GeneralBlock-64、128、256 などの下に割り当てられ、上記と同じプロパティが割り当てられます。これ明らかに大幅な速度低下を引き起こすため、容認できません。これは、問題が追跡されている私のプロジェクトのコードです。

topRow.center = CGPointMake(topRow.center.x,topRow.center.y-PIXELS_PER_FRAME);
while (nextRow = thisTopRow.below) { //stops running when thisTopRow.below is nil
    nextRow.center = CGPointMake(nextRow.center.x,nextRow.center.y-PIXELS_PER_FRAME);       
    if (nextRow.center.y+20 < 401 && !nextRow.userInteractionEnabled)
        [nextRow enableInteraction];        
    thisTopRow = nextRow;
}

CGPoint は型であり、コード ブロックの最後で割り当てが解除されるという印象を受けました。なぜそれが私の記憶を独占しているのですか?結局のところ、興味のある人のためにinstrumentsに保存したトレースファイルをアップロードしますが、すべてをカバーしたと確信しています.

4

3 に答える 3

1

シミュレーターで動作を再現できると仮定して、ターミナルで「top -u」を使用して、アプリケーションの RSIZE も増加していないことを確認してください。

これはおそらく、QuartzCore が独自のアロケータと割り当てゾーンを実装しているものの、Instruments が使用する統計収集メカニズムに完全には接続されていないためです。

バグを報告してください。

于 2009-06-28T16:29:56.880 に答える
0

同じ問題も...シミュレータではゼロバイトが割り当てられていますが、CALayerの各メソッド呼び出しのデバイスでは、48バイトでメモリが増加しています。

これにより、メモリの問題が発生します。

ムラリ。

于 2009-07-15T14:25:46.570 に答える
0

私もこの問題に取り組んでいます。いくつかのUIImageViewが内部にあるUIScrollViewを使用していますが、スクロールビューのオフセットが変更されるたびに、-[CALayer(CALayerPrivate)_copyRenderLayer:flags:]が呼び出され、メモリが48バイト増加します。

繰り返しますが、シミュレータではこれは0バイトとしてログに記録されますが、私のデバイスでは常にメモリを消費しています。

于 2009-07-15T19:50:02.037 に答える