我的应用程序的线程中有以下代码:
while (true) {
if (ready) {
progressIndicatorController.value++;
return;
}
}
ready 变量是从委托(delegate)方法更改的。当我通过单击 Xcode 工具栏中的“运行”按钮打开应用程序时,此代码运行良好。但是,如果我打开此应用程序的 .app(通过单击“产品”>“存档”然后按照步骤操作创建的),此代码不知何故不再起作用。
progressIndicatorController.value
永远不会递增,并且此 if 语句的计算结果永远不会为 true
。什么可能导致这个问题?
最佳答案
这可能是编译器优化造成的。
当您使用 Archive 进行构建时,XCode 在编译器中启用了优化,这可能会丢弃此类代码。我认为将 Ready 变量设置为 volatile 可以解决您的问题,但如果我是您,我只会尝试重写它,这样就不会触发此问题。
您可以通过在方案下拉列表中选择编辑方案来启用优化进行测试。然后在 Run MyApp.app 中将 Build Configuration 设置为 Release。不过,完成后不要忘记将其设置回“调试”,因为当优化打开时,调试器会有些困惑(即,您看不到大多数变量的值,某些断点可能表现不正常,等等...... )
关于objective-c - 代码部署后无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14165300/