3
私は高速列挙とそれが目的Cの目的であることを知っています。なぜ高速列挙が通常の反復より高速であるのかを知りたいのですが?なぜ高速列挙は通常の反復より速いのですか?
私は高速列挙とそれが目的Cの目的であることを知っています。なぜ高速列挙が通常の反復より高速であるのかを知りたいのですが?なぜ高速列挙は通常の反復より速いのですか?
それは高いレバー言語構造ですので、それはより良い最適化を行うことができます。たとえば
を、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つの比較が必要です)。
もちろん、さらに改善が加えられる可能性がありますが、重要なことは、コンパイラに、われわれがどのように正確にそれをしたいのかを伝えることなく、何をしたいのかを知らせることです。コンパイラは私たちよりも優れた作業を行うことができます。
これは理由のために高速列挙と呼ばれています - http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.htmlを参照してください。 –