Если вы рассмотрите 3 приведенных ниже пункта, у вас не будет задержек при загрузке изображений из фото-библиотеки
1.Сохраните только ALAsset URL
в NSMutableArray
вместо ALAsset
. Если вы используете UIImagePicker, вы можете получить его URL через делегат didFinishPickingMediaWithInfo
NSURL* mediaUrl = [info valueForKey:UIImagePickerControllerMediaURL]
;
2.Используйте ALAsset aspectRatioThumbnail
вместо fullResolutionImage
CGImageRef iref = [myasset aspectRatioThumbnail];
UIImage *loadedImage = [UIImage imageWithCGImage:iref];
3.Выполните связанные с пользовательским интерфейсом вещи в основном потоке.
Поскольку блок ALAssetsLibrary
будет выполняться в отдельном потоке.Таким образом, производительность улучшится при работе с пользовательским интерфейсом в основном потоке.
. Для этого используйте
dispatch_sync(dispatch_get_main_queue()
или performSelectorOnMainThread
Пример:
dispatch_sync(dispatch_get_main_queue(), ^{
cell.imageView.image = [UIImage imageWithCGImage:iref];
});//end block
Окончательный код должен выглядеть следующим образом
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset){
dispatch_sync(dispatch_get_main_queue(), ^{
GImageRef iref = [myasset aspectRatioThumbnail];
cell.imageView.image = [UIImage imageWithCGImage:iref];
});//end block
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"Cant get image - %@",[myerror localizedDescription]);
};
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init]; // USE ALAssetsLibrary as single-tone or global while using ARC
[assetslibrary assetForURL:asseturlFromYourArray
resultBlock:resultblock
failureBlock:failureblock];
}