4

を使用すると複数のスレッドで呼び出されることはわかっていますがdrawLayer:、はどうですか?drawlayer:inContext:CATiledlayerdrawRect:

Apple の PhotoScroller のサンプル コードはdrawRect:、ディスクからイメージを取得するために使用され、スレッドを処理するための特別なコードはありません。

のモデルCATiledLayerがスレッドセーフである必要があるかどうかを判断しようとしています。

4

3 に答える 3

2

CATiledLayeriOS シミュレーターでは複数のバックグラウンド スレッドを使用していることがわかりましたが、iPhone では単一のバックグラウンド スレッドを使用しています。

私の Mac にはデュアル コア プロセッサが搭載されていますが、私の iPhone にはシングル コア (A4) が搭載されています。

A5 CPU を搭載した iOS デバイスも複数のスレッドを使用すると思われます。

于 2012-01-20T20:12:32.580 に答える
2

はい、drawRect は複数のスレッドで呼び出すことができます (OS 4.2 でテスト済み)。

この動作は、描画が新しいズーム ジェスチャの到着を追い越すほど高速である場合はあまり目立たないため、ズーム ジェスチャをすばやく入力してテストするまで、アプリは正常に動作する可能性があります。

1 つの代替方法は、モデルをスレッドセーフにすることです。

データ モデルへのアクセスのほとんどを一度に 1 つの描画スレッドに同期することでスレッド セーフが達成される場合は、drawRect の本体を @syncrhonize(self) のようなものでミューテックスすることもできます。

CATiledLayer が 1 つのバックグラウンド スレッドのみを使用するように要求する方法が見つかりませんでした。

于 2010-10-25T12:02:37.577 に答える
1

Appleからのこの技術的なQ&Aを見たことがありますか?

質問に直接答えることはできませんが、モデルの実装方法を決定するのに役立つ可能性があります。

于 2010-06-18T20:07:51.500 に答える