我的应用程序中的一个帖子中有以下代码:
while (true) {
if (ready) {
progressIndicatorController.value++;
return;
}
}
ready变量从委托方法更改。当我通过单击Xcode工具栏中的“运行”按钮打开应用程序时,此代码非常有用。但是,如果我打开此应用程序的.app(我通过单击Product> Archive创建,然后按照步骤创建),此代码将不再起作用。
progressIndicatorController.value
永远不会递增,并且此if语句永远不会计算为true
。什么可能导致这个问题?
答案 0 :(得分:1)
这可能是由编译器优化引起的。
使用Archive构建时,XCode在编译器中启用了优化,可能会抛弃此类代码。我认为将ready变量设置为volatile可以解决你的问题,尽管我是你,我只是尝试重写它,所以它不会触发这个问题。
您可以通过在方案下拉列表中选择编辑方案来启用优化测试。然后在Run MyApp.app中将Build Configuration设置为Release。不要忘记在完成后将其设置回Debug,因为调试器在启用优化时会有些困惑(即,您无法看到大多数变量的值,某些断点可能表现不正常等等... )