(初めて実際にここで質問するので、私のエチケットの失敗を許してください)
基本的な状況:画面内を移動できる複数の画像があります。
簡単な解決策#1:
メインループはオブジェクトの配列をステップオーバーし、各オブジェクトにそれ自体を移動するように指示し、次にビューにそれ自体を更新するように指示します[self.view setNeedsDisplay]
。次に、ビューは配列を取得してそれをステップオーバーし、画面上のポイントにオブジェクトを描画します。
NSArrayに200個の矢印を配置し、ここでそれらを移動する非常に単純なサンプルプロジェクト。
簡単な解決策#2:
次に、オブジェクトにプロパティとしての独自のビューを持たせる実験を開始しました。
オブジェクトがメインのNSArrayに追加されると、ビューがメインの図面ビューに追加されました。[self.view addSubView:newThing.view]
。
メインループはオブジェクトをステップオーバーし、移動するように指示します。オブジェクトクラス内で移動すると、ビューのframe.originが移動し、その結果、メインビュー上で移動します。
これには、パーティクルエフェクトや関連するサブビューなど、必要に応じてオブジェクトが画像にサブビューを追加できるという利点もあります。
欠点は、モデルにビューのようなコードを追加しているように見え、ビューの作業の一部が隠されていることです。
ここに簡単なサンプルプロジェクトがあります。
注:両方のサンプルプロジェクトは、実際のシミュレーターで必要になると予想されるはるかに多くのものを描画しています。
私の質問?"
解決策2は、はるかに見栄えの良いコードにつながりました。簡単な分析を行うと、何千ものオブジェクトに到達するまでパフォーマンスやメモリの違いはあまりないように見えます。その後、描画バージョンでメモリのオーバーヘッドを大幅に節約できます。しかし、400個のオブジェクトであっても、それらすべてのビューを保持するための余分なメモリはそれほど多くありません。
不足しているソリューション#2を使用すべきでない理由はありますか?モデルを最終的に描画するものについて少し賢くすることで、VMCを少し「壊す」ことは問題ありませんか?