UIImageView のメモリ軽減

2011/09/27

さんざん悩まされました。 2000 x 1000 ピクセル級の画像を何枚も一度に読み込んで、サムネイルでループを回していたので明らかに

UIImageView のメモリリーク

imageNamed をやめてキャッシュを無くす方法もだめで、ちゃんとサイズ縮小しようとネットで検索したところ、「カメラアプリの作り方 (3) - 写真を縮小して表示する」の方法で解決しました。

サンプル

    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:imagePath];
    CGSize  size = {300, 300};
    UIGraphicsBeginImageContext(size);
    CGRect  rect;
    rect.origin = CGPointZero;
    rect.size = size;
    [image drawInRect:rect];

    UIImage *newImage;
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

Context 具体的には UIGraphicsBeginImageContext() と UIGraphicsEndImageContext() を利用して新たに画像を生成する方法です。

これは思いつかない方法でした。