部署后代码无效

时间:2013-01-04 21:30:06

标签: objective-c cocoa busy-waiting

我的应用程序中的一个帖子中有以下代码:

while (true) {
    if (ready) {
        progressIndicatorController.value++;
        return;
    }
}

ready变量从委托方法更改。当我通过单击Xco​​de工具栏中的“运行”按钮打开应用程序时,此代码非常有用。但是,如果我打开此应用程序的.app(我通过单击Product> Archive创建,然后按照步骤创建),此代码将不再起作用。

progressIndicatorController.value永远不会递增,并且此if语句永远不会计算为true。什么可能导致这个问题?

1 个答案:

答案 0 :(得分:1)

这可能是由编译器优化引起的。

使用Archive构建时,XCode在编译器中启用了优化,可能会抛弃此类代码。我认为将ready变量设置为volatile可以解决你的问题,尽管我是你,我只是尝试重写它,所以它不会触发这个问题。

您可以通过在方案下拉列表中选择编辑方案来启用优化测试。然后在Run MyApp.app中将Build Configuration设置为Release。不要忘记在完成后将其设置回Debug,因为调试器在启用优化时会有些困惑(即,您无法看到大多数变量的值,某些断点可能表现不正常等等... )