問題を一言でいうと
ここ数週間、IOS アプリケーションを構築していて、いくつかの問題に遭遇しました。アプリケーションは、画像ラスターを 1 秒間に複数回操作して描画することにより、アニメーションを再生します。画像はUIViews
CALayer
like に割り当てて描画しますのでself.layer.contents = (id)pimage.CGImage;
計算とレンダリングは 2 つCADisplayLink
の s に分けられます。
このアニメーション手法は、iPhone 6.1 シミュレーターで満足のいくパフォーマンスを達成しますが、物理デバイス (IOS 6.1.3 を実行する Iphone 4s) でビルドすると、大幅な速度低下が発生します。スローダウンは非常に悪いため、実際にはアプリケーションが使用できなくなります。
疑わしい問題
この質問iOS デバイスと iPhone シミュレーター間のメモリ構成の違い で、シミュレーターは実際のデバイスよりもはるかに多くのメモリを使用できることを読みました。ただし、「instruments」でアプリのメモリ使用量を観察しているときに、合計メモリ使用量が 3Mbs を超えていないことに気付きました。それが実際に問題であるかどうかはわかりませんが、おそらく指摘する価値があります。
この質問によると、iOS-Simulator は複数のコアを使用していますか? 、IOSシミュレーターはIntelチップで実行されますが、実際のデバイスはApple A5チップを使用します。これも速度低下の原因ではないかと思います。
Open GL でアニメーションを書き直すことを検討していますが、抜本的な手順を実行する前に、まず既存のコードを改善してみることをお勧めします。
問題が何であるかを特定するための助けをいただければ幸いです。
アップデート
提案を提供してくれたすべての人に感謝します。プロファイリング中に、主なボトルネックは実際には次のアニメーションのイメージ ラスターをクリアすることであることがわかりました。アニメーションのレンダリングを OpenGL で書き直すことにしました。予想していたほど時間はかかりませんでした。アプリはかなり良いレベルのパフォーマンスを達成し、少しシンプルになりました.