引っ越しました。

このブログは引っ越しました。
今後は引越し先で更新を続けます。
新しいブログではソースコードにシンタックスカラーを付けているので見やすくなっていると思います。

こちらは数ヶ月後に削除しますのでよろしくお願いします。

2010年6月21日月曜日

画像のメモリ削減管理

複数の、それも大量の画像を扱う場合の話。
メモリ的に効率のよい管理、なのでUIImageViewにすべての画像を読み込んでaddSubViewで表示、はもちろん却下。
UIImageviewは数個に抑えておく。

もっと効率のよいやり方はあるだろうけど自分の場合は下記の方法でやりました。
NSString  *imageName = [NSString stringWithFormat: @"img" ];
NSString  *imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
UIImage* img = [[UIImage alloc] initWithContentsOfFile:imagePath];
UIImageView* viewImage = [[[UIImageView alloc] initWithImage:img] autorelease];
初期化は上記の方法でおk。
※以前公開していたコードはミスがあったので修正しました。

処理の途中での画像の差し替えは下記の方法。
viewImage.image = nil;
NSString *imageName = [NSString stringWithFormat: @"img2"];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];
img = [[UIImage alloc] initWithContentsOfFile:imagePath];
viewImage.image = img;
viewImage.contentMode = UIViewContentModeScaleAspectFill;
[img release];
とすればOK。
contentModeは画像を差し替えても初回に読み込んだアスペクト比で画像を表示してしまうので色々なアスペクト比のものを扱う場合はここでリセットしておく。
プロパティの値はここを参照。
http://d.hatena.ne.jp/rnamiki/20090226/1235667228

複数のviewを扱う場合は表示する(画面に写る)画像以外はhiddenプロパティをオフにしておく。
これで大体はおkなんじゃないかなぁ。

参考サイト
iPhone 開発 画像ロード方法3種まとめ

0 件のコメント:

コメントを投稿