iphone - 使用 block 从后台线程加载图像

标签 iphone objective-c ipad

我有以下方法,它基本上调用请求以在后台线程中加载图像的 NSData 数组:

[query findObjectsInBackgroundWithBlock:^(NSArray * objects, NSError * error){

}];

在这种情况下,对象是 NSData 的数组。问题是,如果我要加载 100 张图像(数组中有 100 个元素)。这意味着用户将不得不等待相当长的时间才能看到 UITableView 中显示的任何图像。我想要做的是让他们在图像可用/加载后看到图像。我是否必须更改代码以便它执行 100 个后台线程来加载图像?

最佳答案

你可以在你的 cellForRowAtIndexPath 中实现这样的东西:

通过这种方式,您可以在后台加载每张图片,一旦加载,相应的单元格就会在主线程上更新。

      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;
        });
    });

关于iphone - 使用 block 从后台线程加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502073/

相关文章:

iphone - php web 服务无法从 iPhone 应用程序获取数据

iphone - 应用程序终止时,系统是否释放我的对象?

ios - 来自应用程序内部的 "Gift App"

objective-c - 使用助手启用 macOS 应用程序自动登录时出错

javascript - orientationEvent.gamma 取 +180 到 -180 度

ios - UITableView 删除按钮与内容重叠

ios - 如何根据设备类型定义预处理器宏?

objective-c - 核心数据谓词中的异或?

ios - FBSDKLoginBehaviorSystemAccount 不工作

iphone - iOS中UIPopoverController和DetailViewController的触摸事件问题