2012-06-13 5 views
5

が、私はそうのように、他の言語で働いたから再利用の変数に外ループを宣言する習慣を取得していますObjective-Cのループ外の変数を宣言すると最適化効果はありますか?

NSString *lcword; 
for(NSString *word in tokens) 
{ 
    lcword = [ word lowercaseString ]; 
    ...  
} 

それが合理的にもObjective-Cでこれを行うことです、または作るのに十分賢いコンパイラですそれは不要ですか?

+0

ほとんどの場合、それは、変数を再利用することは合理的ではありません。マイクロ最適化によるバグ・フェスト –

答えて

9

私が知っているObjective-Cには利点はありません。現代のObjective-CコンパイラがAFAIKを使用するたびに、関数またはメソッドの先頭にローカル変数のスタック領域が割り当てられます。変数をループにスコープするだけで、ループの外で名前を使用することができなくなり、必要な場合にスタックスペースを再利用することができなくなります。

も参照してください:Is there any overhead to declaring a variable within a loop? (C++)(これは、異なる言語についてですので、私はだまされやすい人としてそれをマークしていないだろうが、職場でのコンパイラの技術は非常によく似ています)

0

変数を再利用できる場合は、それを実行します。それが必要でない場合は、新しい反復を宣言する必要はありません。

+3

これは、変数のスコープが必要以上に大きくなるため、誤用の可能性がより大きくなります – Mark

+2

これは私がこれに同意することはできません。意味論的に最も意味のある方法で変数を使うべきです。それらに再利用を強制しようとすることは、バグのレシピです。あなたが本当の問題を抱えておらず、その変化が測定可能に問題を解決するのでなければ、投機的なパフォーマンス向上のためのあなたのプログラムの可読性を減らすことはほとんど常に悪い考えです。 – Chuck

+0

私も@chuckに同意します。それは読みやすさを緩和するので、いつでも変数を再利用できます。 –

関連する問題