【问题标题】:Does declaring a variable outside a loop in Objective-C have any optimising effect?在 Objective-C 的循环外声明变量是否有任何优化效果?
【发布时间】:2025-11-29 13:45:01
【问题描述】:

我已经养成了在循环外声明重用变量的习惯,因为我在其他语言中工作过,就像这样:

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

在 Objective-C 中也这样做是否合理,或者编译器是否足够聪明以至于不需要它?

【问题讨论】:

  • 在大多数情况下,重用变量是不合理的。通过微优化实现的错误盛宴

标签: objective-c xcode optimization loops


【解决方案1】:

据我所知,Objective-C 没有任何好处。 AFAIK 每个现代 Objective-C 编译器都会在函数或方法的开头为局部变量分配堆栈空间。将变量范围限定为循环只会阻止您在循环外使用名称,并阻止编译器在需要时重用堆栈空间。

另请参阅:Is there any overhead to declaring a variable within a loop? (C++)(这是关于不同的语言,所以我不会将其标记为欺骗,但工作中的编译器技术非常相似)

【讨论】:

    【解决方案2】:

    如果你可以重用一个变量,那就去做吧。如果不需要,则无需在每次迭代时声明一个新的。

    【讨论】:

    • 这使得变量的范围比需要的更大,因此被滥用的可能性更大
    • 我不能同意这种说法。您应该以在语义上最有意义的方式使用变量。试图对它们强制重用是错误的秘诀。除非您遇到真正的问题并且更改可以衡量地解决该问题,否则降低程序的可读性以提高推测性能几乎总是一个坏主意 IMO。
    • 我也同意@chuck 对我的看法,它简化了可读性,所以每当我可以重用变量时,我都会这样做。
    最近更新 更多