gpt4 book ai didi

iphone - 这个 Core Graphics 代码线程安全吗?

转载 作者:可可西里 更新时间:2023-11-01 03:30:50 25 4
gpt4 key购买 nike

我知道在任何线程上绘制都是安全的,只要我调用

UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
UIGraphicsEndImageContext();

在同一个线程上。

通过这种方法获取 View 的屏幕截图大约需要 300 毫秒,这还不错,但我的情况很紧,所以我想在后台线程中进行。

这是我正在做的:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
});

这里唯一有问题的是 view,它位于主线程上。从后台线程调用 view.layer 上的 renderInContext 是否安全?或者一般来说,从另一个线程只读 UIKit 对象是否安全?

(请不要给我默认的“UIKit 不是线程安全的”答案。我已经知道了。这是一个特例(不要告诉我没有特例)。)

(上面的代码工作正常,但我不确定这是否只是巧合。)

最佳答案

Core Graphics 和 Core Animation 是低级 API,通常是线程安全的。但是,有关访问的相同规则仍然适用:任何作品都不能同时被多个线程访问,否则绘图将失败并且您的应用程序将崩溃。我会对 UIImage 保持警惕(但不害怕),因为 UIKit 对象不仅不是线程安全的,它们基本上是后台线程中的定时炸弹,并且会无缘无故地从悬崖上直接跳入 Exception Land。然而,因为 UIImage 只是一个 CGImage 包装器,所以大多数绘图都是线程安全的。

关于iphone - 这个 Core Graphics 代码线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11355787/

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