Является ли этот код Core Graphics потокобезопасным?

Я знаю, что рисовать в любой теме безопасно, пока я звоню

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

(приведенный выше код работает нормально, но я не уверен, что это просто совпадение.)

7
задан Snowman 6 July 2012 в 04:22
поделиться