Я знаю, что рисовать в любой теме безопасно, пока я звоню
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 не является потокобезопасным». Я уже знаю, что. Это особый случай (и не говорите мне, что особых случаев нет ).)
(приведенный выше код работает нормально, но я не уверен, что это просто совпадение.)