次の問題があります。
4x4 レイアウトで 16 の正方形 (それぞれが UIImageView から継承して作成したクラス) のグリッドを表示するプライマリ ビュー オブジェクト (UIView から継承) があります。
これらの 16 個の正方形はそれぞれ 160x160 で、30kb 以下の画像 (正方形ごとに異なる画像) が含まれています。ただし、画像は 500x500 (プログラムの他の場所でフルサイズで使用されるため) であるため、setFrame メソッドによって「正方形」クラスで 160x160 にサイズ変更されます。
アプリの実行中に Xcode のメモリ管理機能を調べると、いくつかのことに気付きました。
- これらの各正方形をプライマリ ビュー オブジェクトに追加すると、アプリのメモリ使用量が 1 MB 増加します。これはインスタンス化時には発生しませんが、プライマリ ビュー オブジェクトで [self addSubview:square] によって追加された場合にのみ発生します。
- すべての正方形に同じ画像を使用すると、メモリの増加は最小限になります。画像なしで正方形のオブジェクトを初期化すると、増加は基本的にゼロになります。
- 同じアプリをシミュレーターで実行すると、実際のデバイスの 1/6 のメモリが使用されます。
ここで要点は、30kb の画像をロードするときに、各正方形が 1MB のメモリを消費するのはなぜですか? これを減らす方法はありますか?[UIImage imageNamed:img]
、[UIImage imageWithContentsFromFile:path]
、[UIImage imageWithData:imgData scale:scale]
、およびフレームのサイズを変更しないなど、さまざまな方法で画像を作成しようとしました。