我知道只要我打电话,在任何线程上画画都是安全的
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
UIGraphicsEndImageContext();
在同一个线程上。
通过这种方法截取一个视图大约需要 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
,它位于主线程上。从后台线程调用renderInContext
a是否安全?view.layer
或者一般来说,从另一个线程只读 UIKit 对象是否安全?
(并且请不要给我默认的“UIKit 不是线程安全”的答案。我已经知道了。这是一个特例(不要告诉我没有特例)。)
(上面的代码运行良好,但我不确定这是否只是巧合。)