使用块进行异步下载

时间:2012-02-08 01:04:00

标签: iphone objective-c objective-c-blocks

以下代码位于cellForRowAtIndexPath内。

1。)我需要以可能的方式修改此代码,取消下载或在viewDissapears时阻止。我想,我应首先在.h文件中初始化一个块,然后在cellForRowAtIndexPath中使用它,然后在viewDidDissapear时将其设置为nil。 (我不确定这种方法是否正确)。有人可以帮我编辑这段代码吗?

注意:应该讨论的是,当用户在特定视图上时,以及下面的代码正在下载某些图像时,用户决定移动到另一个视图。然后我想取消viewDidDissapear方法

中的下载
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);    
    dispatch_async(concurrentQueue, ^{        
        NSData *image = // I will be downloading an URL here            
        //this will set the image when loading is finished
        dispatch_async(dispatch_get_main_queue(), ^{
          // I will be displaying the Downloaded image here
        });
    });

3 个答案:

答案 0 :(得分:0)

您不应该等待视图消失,并取消表视图单元格的prepareForReuse方法中的操作。否则,您可能会在下载完成之前看到一个单元格被回收(例如,因为用户执行了快速滚动),然后完成下载将在正确的内容覆盖之前显示错误的内容。除此之外,您的方法看起来还可行。

答案 1 :(得分:0)

答案 2 :(得分:0)

下载已经是异步的,因此使用GCD包装它只会使问题复杂化。这是一个可以下载的可下载项目,可以在后台下载图像,并在到达时将它们添加到表格视图中。您可以轻松添加在下载器对象发布时取消下载的代码:

https://github.com/mattneub/Programming-iOS-4-Book-Examples/blob/master/p754p772downloader/p754downloader/RootViewController.m