UIKit 関数参照によると、メインスレッドでのみ呼び出す必要があるUIGraphicsBeginImageContextWithOptions
ため、スレッド化について少し混乱しています。呼び出されるとビットマップ ベースのコンテキストが作成され、CoreGraphics の関数またはfor 、forなどのメソッドを使用して操作できるようになります。CoreGraphics の描画ではすべてが明確です。すべての関数に操作される CGContextRef 引数を渡しますが、UIKit 描画メソッドはスタック内の現在のコンテキストを使用します。What's New in iOS 4.0 のリリース ノートには、次のように書かれています。 UIGraphicsBeginImageContextWithOptions
drawInRect:
UIImage
-drawInRect:withFont:
NSString
UIKit でのグラフィックス コンテキストへの描画がスレッドセーフになりました。具体的には:
- グラフィック コンテキストへのアクセスと操作に使用されるルーチンは
、異なるスレッドに存在するコンテキストを正しく処理できるようになりました。
- 文字列と画像の描画がスレッドセーフになりました。
- 複数のスレッドで色とフォントのオブジェクトを安全に使用できるようになりました。
ここまでは順調ですね。興味深い部分は、集中的な描画を行いUIGraphicsBeginImageContextWithOptions
、コンテキストを作成して複数の画像を作成するプロジェクトがあることですが、これらの操作に時間がかかり、描画をバックグラウンド スレッドに移動し、準備ができたら表示します。それらはいくつかのアニメーションで画面に表示され、すべてが正常に機能します-クラッシュもリークもありません. 画像は期待どおりに描画されUIGraphicsBeginImageContextWithOptions
、バックグラウンド スレッドのコンテキストが作成され、すべて問題ないようです。
だから私の質問は次のとおりです: -バックグラウンドで正常に動作しているように見えるのに、メインスレッドでのみ
呼び出す必要があるのはなぜですか? -の
使い方UIGraphicsBeginImageContextWithOptions
UIImage
-drawInRect:
たとえば、現在のコンテキストがなく、そこで呼び出すことができないため作成できないように見えるバックグラウンド スレッドでのメソッドUIGraphicsBeginImageContextWithOptions
ですか?
- UIKit のメソッドを使用した背景画像操作の正しいアプローチは何CGBitmapContextCreate
ですか?-drawInRect:
UIImage