1

AGImagePickerControllerを使用してアルバムから複数の画像を選択し、選択したアセットをviewControllerにプッシュして、各アセットをUIImageに変換しようとしています。ただし、20を超える画像を選択すると、メモリ不足の警告が表示され始め、アプリが終了することがわかりました。これが私の変換コードです

for(int i =0 ; i < [self.selectedPictures count] ; i++)
{
    NSLog(@"Object %d",i);
    ALAsset *asset = [self.selectedPictures objectAtIndex:i];
    ALAssetRepresentation *rep = [asset defaultRepresentation];
    CGImageRef iref = [rep fullResolutionImage];
    UIImage *anImage = [UIImage imageWithCGImage:iref scale:[rep scale] orientation:(UIImageOrientation)[rep orientation]];
    float newHeight = anImage.size.height / (anImage.size.width / 1280);

    UIImage *resizedImage = [anImage resizedImageWithContentMode:UIViewContentModeScaleAspectFit bounds:CGSizeMake(newHeight, 1280.f) interpolationQuality:kCGInterpolationHigh];

    UIImage *resizedThumbnailImage = [anImage resizedImageWithContentMode:UIViewContentModeScaleAspectFill bounds:CGSizeMake(290.0f, 300.f) interpolationQuality:kCGInterpolationHigh];

    // JPEG to decrease file size and enable faster uploads & downloads
    NSData *imageData = UIImageJPEGRepresentation(resizedImage, 0.6f);
    //NSData *thumbnailImageData = UIImagePNGRepresentation(thumbnailImage);
    NSData *thumbnailImageData = UIImageJPEGRepresentation(resizedThumbnailImage, 0.6f);


    PFFile *photoFile = [PFFile fileWithData:imageData];
    PFFile *thumbnailFile = [PFFile fileWithData:thumbnailImageData];

    [photoFile saveinbackground];
    [thumbnailFile saveinbackground];
}

だから私はCGImageRelease(iref);を追加する必要があると考えました。anImageの後にirefを解放すると、メモリの警告が消えます。ただし、最後のアセットがUIImageに変換された後、アプリがクラッシュします。そして今のところ、なぜクラッシュしているのかわかりませんでした。

4

2 に答える 2

3

、 またはCGImageRelease(iref);を使用しない限り、行うべきではありません。それがクラッシュする理由です。CGImageCreateCGImageCreateCopyCGImageRetain

于 2012-11-07T22:09:27.703 に答える
-1

これを修正する方法を見つけました。使用する@autoreleasepool

于 2012-11-07T23:29:35.403 に答える