呼び出す限り、どのスレッドでも安全に描画できることを知っています
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はスレッドセーフではありません」という回答を私に与えないでください。私はすでにそれを知っています。これは特別なケースです(特別なケースがないとは言わないでください)。)
(上記のコードは正常に動作しますが、それが単なる偶然かどうかはわかりません。)