Мне нужно заполнить несколько экземпляров UIImageView (около 10) экземплярами UIImage из ALAssets. Я не хочу блокировать основной поток при этом, поэтому хочу сделать как можно больше в фоновом потоке. Получение CGImage от ALAsset занимает больше всего времени, поэтому я хотел бы поместить его в фоновый поток.
У меня проблема в том, что только первое изображение действительно загружается правильно. Все остальные экземпляры UIImageView заканчиваются пустыми.
Ниже мой (упрощенный) код. Метод processAssets просматривает массив ресурсов и вызывает loadCGImage в фоновом потоке. Этот метод получает fullScreenImage из ALAsset и передает его в populateImageView в основном потоке, который использует его для генерации UIImage и заполнения UIImageView.
- (void)processAssets {
for(int i = 0; i < [assetArr count]; i++){
ALAsset *asset = [assetArr objectAtIndex:i];
[self performSelectorInBackground:@selector(loadCGImage:) withObject:asset];
}
}
- (void)loadCGImage:(ALAsset *)asset
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CGImageRef imgRef = CGImageRetain([[asset defaultRepresentation] fullScreenImage]);
[self performSelectorOnMainThread:@selector(populateImageView:) withObject:imgRef waitUntilDone:YES];
CGImageRelease(imgRef);
[pool release];
}
- (void)populateImageView:(CGImageRef)imgRef
{
UIImage *img = [[UIImage imageWithCGImage:imgRef] retain];
UIImageView *view = [[UIImageView alloc] initWithImage:image];
}
Я не уверен, почему это не работает должным образом. Есть идеи?