1

私は本当に移動のためにコードを最適化しようとしていますUIImageViews

私は自分のすべてを列挙するための主要な方法を持っていUIImageViewsます。

どちらの列挙がより高速に実行されますか、それとも両方ともまったく同じように実行されますか?

例1:この例では、すべてUIImageViewsを自分UIViewControllerのビューで列挙します

 for (UIImageView *imageView in self.view.subviews)
{
    ...
}

例2:この例では、すべてを列挙しUIImageViewsますNSMutableArray。配列には常にでUIImageViews見つかったものがすべて含まれていますself.view.subviews(これは、self.view.subviewsで通常見つかったすべてのUIImageViewのコピーであり、一度作成するだけで済みます)

 for (UIImageView *imageView in self.imageViews)
{
    ...
}

では、どの例がより速く、より最適化された列挙を提供する必要がありますか?これらは、私が設定したCADisplayLinkによって常に列挙されていることに注意してください。また、self.view.subviewsが返されるNSArrayのでNSArray、最初の列挙を使用するときにこれが常に作成されている可能性があることにも注意してください。このNSMutableArrayアプローチの方がパフォーマンスが高く、オーバーヘッドが少ないと思いますが、よくわかりません。

編集:すべてのサブビューはUIImageViewsです。また、subviewsプロパティを使用するときに重大なオーバーヘッドがあるかどうかもわかりません。これは、NSArrayを取得するために「舞台裏」の作業を行う可能性があるためです。

4

2 に答える 2

2

サブビューを反復する代わりに、Tagプロパティを使用して非常に高速に実行できます

例:

UIimageViewスルーにタグを追加code or xib

myImageView.tag = 1;

それで、

 UIImageView *myImageView = ([[self.view viewWithTag:1] isKindOfClass:[UIImageView class]])?(UIImageView *)[self.view viewWithTag:1]:nil;

反復コードについて

すべてのサブビューが UIImageViews であると仮定すると、最初のコードが最も効率的になります。

for (UIImageView *imageView in self.view.subviews)
于 2013-03-13T03:29:09.943 に答える