2

AssetsLibrary を使用してデバイスの写真を読み込むフォト ギャラリー アプリケーションを開発しています。別の VC でランダムな画像を提示するとき、次のことに気付きました。フル解像度の画像が imageView にロードされるまでに約 1 秒または 2 秒かかります (ネイティブの photosApp よりもはるかに長くなります)。いくつかの画像を読み込んだ後、メモリ警告」が表示されます。表現を fullScreenImage に設定すると、警告は停止しますが、これは望ましくありません。ビューでスムーズなパフォーマンスと高品質の画像を得るには、何を変更する必要がありますか?

これがコードです。何が問題なのか教えていただければ幸いです。

これは、自分のイメージを画面に表示したい VC です。

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%@",assetsController);

    detailImageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
    [self.view addSubview:detailImageView];
    detailImageView.image = smallImage; //small image is my asset thumbnail and is passed as an argument in my init function

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

        ALAsset *asset = [assetsController.albumPics objectAtIndex:assetsController.index];
        ALAssetRepresentation *representation = [asset defaultRepresentation];

        bigImage = [[UIImage imageWithCGImage:[representation fullResolutionImage]]retain];

        dispatch_async(dispatch_get_main_queue(), ^{

            detailImageView.image = bigImage;

        });
        [pool release];
    });
}

更新 1

    {
        UIImageView *detailImageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
        [self.view addSubview:detailImageView];
        detailImageView.image = smallImage;


        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{

            NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

            ALAsset *asset = [assetsController.albumPics objectAtIndex:assetsController.index];
            ALAssetRepresentation *representation = [asset defaultRepresentation];

            UIImage *bigImage = [UIImage imageWithCGImage:[representation fullResolutionImage]];


            dispatch_async(dispatch_get_main_queue(), ^{

                detailImageView.image = bigImage;

            });
            [pool release];

        });
}

ここに画像の説明を入力

4

1 に答える 1

0

bigImageインスタンス変数ですか?ここ以外で使われてる?他の場所で使用されていない場合は、ローカル変数にする必要があり、保持しないでください。保持するインスタンス変数の場合は、新しい値を割り当てる前に以前の値を解放する必要があります。

同じ議論が適用されますdetailImageView

于 2013-03-22T17:54:21.060 に答える