私はELCImagePickerを使用していましたが、asseltsを使用して写真ライブラリから一度に複数の写真をインポートする際に同じ問題に直面していました。インポートにかかる時間は短縮できませんが、クラッシュの問題は解決されます。
for (int j=0; j<[assetArray count]; j++)
{
@autoreleasepool // This is compiler level feature so will only work on xcode 4.1 or above
{
ALAsset *assest = [assetArray objectAtIndex:j];
CGImageRef imageRef = assest.defaultRepresentation.fullResolutionImage;
UIImage *image = [UIImage imageWithCGImage:imageRef];
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:documentsPath atomically:YES];
}
}
可能であればので、それはメモリの消費量を減らすのに役立ちかもしれ全体ではなくALAssetオブジェクトのassetArrayにのみAssetURLを保存し、URLから一度にALAssetを作成してみてください。そのような場合は、ブロックを使用する必要があります。
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
CGImageRef iref = [[myasset defaultRepresentation] fullResolutionImage];
if (iref) //You have image so use it
{
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"Can't get image - %@",[myerror localizedDescription]);
};
ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease];
[assetslibrary assetForURL:imageURL resultBlock:resultblock failureBlock:failureblock];
私は同じ問題を抱えていたが、私は、データベース内の資産のURLを保存して、それを解決して、私はドキュメントディレクトリに画像を保存する必要があるときに私はで資産1を取得しますドキュメントディレクトリにイメージを格納します。 1つの理由は、配列のアセット資産を保存することである可能性があります。アセットのURLと、メモリーの問題を減らす自動解放プールのループでもう1つこれを実行します。 – Leena