2012-06-13 8 views
5

Nabyłem zwyczaju oświadczając ponownie wykorzystane zmienne pętle na zewnątrz od pracowała w innych językach, tak jak poniżej:Czy deklarowanie zmiennej poza pętlą w Objective-C ma jakiś efekt optymalizujący?

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

Czy to rozsądne, aby zrobić to w Objective-C również, czy kompilator wystarczająco inteligentny, aby to jest niepotrzebne?

+0

W większości przypadków nie jest to rozsądne, aby ponownie użyć zmiennej. Bug fest poprzez mikrooptymalizację –

Odpowiedz

9

Nie ma żadnej korzyści w Objective-C, o której wiem. AFAIK każdy nowoczesny kompilator Objective-C przydziela przestrzeń stosu zmiennych lokalnych na początku funkcji lub metody. Ustalenie zmiennej w pętli zapobiega używaniu nazwy poza pętlą i uniemożliwia kompilatorowi ponowne wykorzystanie przestrzeni stosu, jeśli chce.

Zobacz także: Is there any overhead to declaring a variable within a loop? (C++) (Chodzi o inny język, więc nie byłoby oznaczyć go jako dupe, ale techniki kompilator w pracy są bardzo podobne)

0

Jeśli możesz ponownie użyć zmiennej, zrób to. Nie ma potrzeby deklarowania nowej w każdej iteracji, jeśli nie jest ona potrzebna.

+3

To sprawia, że ​​zmienna ma zasięg większy niż potrzeba, więc większa możliwość niewłaściwego użycia – Mark

+2

Nie mogę się z tym zgodzić. Powinieneś używać zmiennych w sposób, który ma sens w sensie semantycznym. Próba wymuszenia na nich ponownego użycia jest receptą na błędy. Jeśli nie masz prawdziwego problemu, a zmiana wymiernie rozwiązuje ten problem, zmniejszenie czytelności programu dla spekulacyjnych wzrostów wydajności jest prawie zawsze złym pomysłem IMO. – Chuck

+0

Zgadzam się również z Tobą dla mnie @chuck ułatwia to czytelność, więc ilekroć mogę ponownie użyć zmiennej robię to. –

Powiązane problemy