gpt4 book ai didi

iphone - 如何在 iPhone 中暂停异步任务?

转载 作者:行者123 更新时间:2023-11-28 22:42:37 24 4
gpt4 key购买 nike

我在主视图 Controller 上使用异步任务从 Web 获取图像。当用户单击我的 TableView 上的任何单元格时,我想暂停异步任务并转到另一个 View 。我该怎么做?当用户返回主视图时,我还需要继续执行任务。我的代码

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *imagefromWeb = [UIImage imageWithData:[NSData dataWithContentsOfURL:[IconArray objectAtIndex:indexPath.row]]];
CGSize newSize= CGSizeMake(45.0,45.0);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[imagefromWeb drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image=newImage;
[cell setNeedsLayout];
MAKE_IMAGE_CURVED(cell.imageView)
});



});

最佳答案

对此有两种合理的方法。一种是在您希望挂起时设置一个标志。后台队列上的 block 在执行之前应该检查这个标志,如果设置了,等待它被取消设置。标志最好构造为信号量。

但是,GCD 确实支持队列挂起。如果您将后台请求放在自定义队列中(使用 dispatch_queue_create 创建一个),您可以在队列上使用 dispatch_suspend 以防止进一步的 block 执行。一旦您准备好再次出发,请调用 dispatch_resume。这将不会阻止当前正在执行的 block 完成 - 只是 future 的 block 。我想不出任何明智的方法来停止执行已经在进行中的 block 。

对于涵盖信号量和队列管理的 GCD 文档,see here .

关于iphone - 如何在 iPhone 中暂停异步任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com