gpt4 book ai didi

iphone - 如何取消 NSOperationQueue

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:59 25 4
gpt4 key购买 nike

想知道我是否正确地实现了下面的方法,因为 isCancelled 没有取消线程。我有一张正在缩放的​​图像,缩放完成后,将调用此方法来更新图像。因此,当用户将手指从按钮上移开时,将调用此方法。如果他们在完成之前再次尝试按下按钮,我会在队列中调用 cancelAllOperations,但它不起作用。甚至不确定 cancelAllOperations 是否触发了一个标志,或者我是否需要继续调用它来获得结果。有人对此有任何见解吗?

- (void) refreshImage
{
NSBlockOperation *operation = [[NSBlockOperation alloc] init];
__unsafe_unretained NSBlockOperation *weakOperation = operation;

[operation addExecutionBlock:
^{
UIImage *image = [[self.graphicLayer imageForSize:self.size] retain];
if (![weakOperation isCancelled])
{
[[NSOperationQueue mainQueue] addOperationWithBlock:
^{
self.image = image;
[image release];
}];
}
else
{
[image release];
return;
}
}];

[self.queue addOperation: operation];
[operation release];
}

最佳答案

发现问题,不得不更换:

__unsafe_unretained NSBlockOperation *weakOperation = operation;

与:

__block NSBlockOperation *weakOperation = operation;

顺便说一句,对于任何感兴趣的人来说,有一个关于并发的好视频,特别是在单独的线程上绘制并使用 NSOperationQueue 在 WWDC2012 中称为在 IOS 上构建并发用户界面。

关于iphone - 如何取消 NSOperationQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432029/

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