我知道它是安全的,只要我呼吁任何线程画
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
在view.layer
从后台线程? 或者一般,是安全的只读从另一个线程的UIKit对象的?
(请不要给我默认“的UIKit不是线程安全”的答案。我已经知道了,这这里是一个特殊的情况下(不要告诉我,有没有特殊的情况下)。)
(上面的代码工作正常,但我不知道,如果这只是一个巧合。)