0

我的应用程序的线程中有以下代码:

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

就绪变量从委托方法更改。当我通过单击 Xcode 工具栏中的“运行”按钮打开应用程序时,此代码运行良好。但是,如果我打开此应用程序的 .app(我通过单击产品 > 存档然后按照步骤创建),则此代码将不再起作用。

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

4

1 回答 1

1

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

当您使用 Archive 构建时,XCode 在编译器中启用了优化,可以丢弃这种代码。我认为将 ready 变量设置为 volatile 可以解决您的问题,尽管如果我是您,我会尝试重写它,以免触发此问题。

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

于 2013-01-04T21:39:24.897 回答