0

重複の可能性:
複数のレイヤーを使用している場合、未使用の CALayer メモリを解放できない

ユーザーがCALayersである一連の画像を閲覧できるアプリがあります。画面に 20 個を超えるものを追加すると、iPad 2 がクラッシュすることがわかりました。明らかに、画面に表示されているときにそれらを動的にロードする必要があります。

そのため、不要になったときにスーパーレイヤーから CALayer を削除することで、これを実装しました。ただし、「アクティビティモニター」で表示してもメモリが消えないことがわかりました。ただし、シミュレータで「メモリ警告をシミュレート」するとメモリは解放されます。いいと思うかもしれませんが、それがメモリ警告の目的です。ただし、 - 画像をブラウズしていると iPad の RAM が足りなくなり、クラッシュするまでメモリの使用量が増えていきます. CALayer にそのリソースを強制的に解放させる方法を知っている人はいますか?

これが私のコードです。レイヤーコンテンツの割り当てを省略した場合、メモリ使用量は低いままです(もちろん、画像は表示されません)

    UIImage* image = [UIImage imageNamed:@"imageName"];

    frontLayer = [CALayer layer];
    frontLayer.bounds = CGRectMake(0, 0, 952, 650);
    frontLayer.contents = (id) image.CGImage;

私はARC を使用していないことに注意してください。スーパーレイヤーからレイヤーを削除した後、それを解放します(プロパティによって保持されます)。メモリ不足の警告でメモリが再利用されているように見えるという事実は、保持/解放の方法に問題はないと思いますが、私はアイデアを受け入れています。

4

1 に答える 1

1

これは実際にはこの投稿の複製であることがわかりました

[UIImage imageNamed:@""]; [UIImage imageWithContentsOfFile:@""] を使用すると、問題はなくなります。

複数のレイヤーを使用している場合、未使用の CALayer メモリを解放できません

于 2013-01-09T09:46:03.300 に答える