4

私は、ビデオ ストリーミングに関連する iOS プロジェクトに取り組んでいます。UI のコントロールの 1 つは MPVolumeView です。問題は、ボリュームを変更するためのコントロールをスライドさせると、多くの CPU を使用しているように見えることです。実際、スライダーを使用している間、UI が遅くなります。どうすればパフォーマンスを改善できますか?、おそらく私は何か間違ったことをしていますか?

計測器からの CPU 負荷の参照画像。 左のみのストリーミングでは、右のピークはストリーミング + ボリューム スライドでした。

計測器からの CPU 負荷の参照画像。左のみのストリーミングでは、右のピークはストリーミング + ボリューム スライドでした。

ありがとう。

編集:

これは、ビューにコントロールを追加する方法です:

MPVolumeView *mpVolume = [[MPVolumeView alloc] initWithFrame:CGRectMake(32,
                                                                        56,
                                                                        160,
                                                                        9)];
[self addSubview:mpVolume];
[mpVolume release];

「self」はカスタム ビューであり、UIView から継承されますが、xib と drawRect は使用していません。「initWithFrame:frame」メソッドにすべてのコントロールを追加しているだけです。

4

1 に答える 1

0

init with frame が呼び出された回数を監視します。状況に応じて、複数回呼び出されることもあれば、頻繁に呼び出されることもあります。ビューが最初に設定されたときに、ボリューム ビューのみを割り当てたいと思うでしょう。ボリュームビューを何度も設定しているようです。

可能性の 1 つは、ボリューム ビューをクラス プロパティ (プライベートまたはパブリック) にすることです。

 @property (nonatomic, retain) MPVolumeView *mpVolume;

それからもちろん... @synthesize mpVolume = _mpVolume

次に、initWithFrame で nil かどうかを確認してから割り当てます。

 if(_mpVolume == nil){
      _mpVolume = [[MPVolumeView alloc] initWithFrame:CGRectMake(32,56,160,9)];
      [self addSubview:_mpVolume];
 }

次に、dealloc で mpVolume を解放します。

于 2012-08-02T15:05:47.190 に答える