私は ELCImagePicker を使用していましたが、asselt を使用して写真ライブラリから一度に複数の写真をインポートしているときに同じ問題に直面していました。インポートにかかる時間を短縮することはできませんが、クラッシュの問題は解決されます。
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];