使用块从后台线程加载图像
我有下面的方法,基本上调用一个请求加载在后台线程的图像NSData数组:
[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){ }];
在这种情况下,对象是NSData的一个数组。 问题是,如果我有100个图像加载(数组中的100个元素)。 这意味着用户将不得不等待一段时间才能看到在UITableView中显示的图像。 我想要做的是让他们看到一个图像,一旦它是可用/加载..我必须然后更改代码,以便它有100个后台线程加载图像?
你可以在你的cellForRowAtIndexPath中实现这样的东西:
这样你就可以在后台加载每个图片,并且一旦加载了相应的单元就会在mainThread上更新。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) { NSData *data0 = [NSData dataWithContentsOfURL:someURL]; UIImage *image = [UIImage imageWithData:data0]; dispatch_sync(dispatch_get_main_queue(), ^(void) { UIImageView* imageView = (UIImageView*)[cell viewWithTag:100]; imageView.image = image; }); });
不,你不必创build这么多的后台线程。 使用NSOperationQueue
。
您可以创buildNSInvocationOperation
并将其设置为NSOperationQueue
例如:初始化NSOperationQueue
:
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
创buildNSInvocationOperation
:
NSInvocationOperation* downloadOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(selectorToDownloadImage:) object:YouData]; [operationQueue addOperation:downloadOperation]; [downloadOperation release];
- 风景模式只适用于iPhone或iPad
- 命令/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang失败,退出代码1
- iAds在iPhone上插播广告?
- UIImagePickerController不在iOS 8中呈现
- 使用AVAudioplayer在后台播放音乐
- iPad Safari – 使键盘消失
- 如何手动Symbolicate iOS崩溃查看崩溃日志
- iPad的Safari手机似乎忽略了HTML5video元素的Z-indexing位置
- 你如何确定UICollectionView flowLayout中的单元格之间的间距