2017-02-06 14 views
3

私は高速列挙とそれが目的Cの目的であることを知っています。なぜ高速列挙が通常の反復より高速であるのかを知りたいのですが?なぜ高速列挙は通常の反復より速いのですか?

+1

これは理由のために高速列挙と呼ばれています - http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.htmlを参照してください。 –

答えて

5

それは高いレバー言語構造ですので、それはより良い最適化を行うことができます。たとえば

を、NSArrayを反復考える:

すべての反復で
for (NSUInteger i = 0; i < [array count]; i++) { 
    id object = [array objectAtIndex:i]; 
} 

、2つのメソッドの呼び出しがあります。 .countはメソッド呼び出しです。 .objectAtIndexはメソッド呼び出しです。メソッド呼び出しは遅いです。

NSUInteger count = [array count]; 
for (NSUInteger i = 0; i < count; i++) { 

秒を修正することはできません。

高速列挙では、項目をC配列にロードし、メソッドを呼び出す必要なく高速に反復処理できます。また、別の大きな改善点は、iが配列の境界内にあるかどうかをチェックすることです(for iは繰り返しごとに1つの比較が必要です)。

もちろん、さらに改善が加えられる可能性がありますが、重要なことは、コンパイラに、われわれがどのように正確にそれをしたいのかを伝えることなく、何をしたいのかを知らせることです。コンパイラは私たちよりも優れた作業を行うことができます。

関連する問題