iOS で画像のパフォーマンスをテストするアプリを作成しました。私は 3 つの異なるビューを試しましたが、すべて同じ大きな PNG を表示しています。1 つ目は、CGContextDrawImage() を使用して描画するビューです。2 番目は、self.layer.content を設定します。3 つ目はプレーンな UIImageView です。
使用される画像は、-[UIImage initWithContentsOfData:] を使用して作成され、viewController にキャッシュされます。各テストでは、ビューの割り当て、ビュー階層への追加、および削除と解放を繰り返します。タイミングは、loadView の開始から viewDidAppear まで取得され、fps として指定されます (事実上、1 秒あたりのビューの描画数)。
912 x 634 のスケーリングされていない画像を使用して、5.1 を実行している iPad 1 の結果を次に示します。
CGContext: 11 fps
CALayer: 10 fps
UIImageView: 430 fps (!)
私は幻覚ですか?UIImageView がそれほど高速に描画できることはほぼ不可能に思えますが、実際に画像がちらつくのを見ることができます。キャッシングの可能性をなくすために 2 つの類似したビューを交換しようとしましたが、フレーム レートはさらに高くなりました。
UIImageView は -[CALayer setContent] の単なるラッパーだといつも思っていました。ただし、UIImageView のプロファイリングでは、特定できる描画方法に費やされた時間はほとんどありません。
何が起こっているのか理解したいです。どんな助けでも大歓迎です。