objective-c - 代码部署后无法运行

标签 objective-c cocoa busy-waiting

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

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/

相关文章:

ios - NSError** 问题在多功能调用中反向传播

html - NSString 移除 html 标签,保留 <Text in angle brackets>

cocoa - NSOutlineView 奇怪的填充正在裁剪徽章

objective-c - 有没有办法查看撤消堆栈?

java - 没有打印语句,循环看不到其他线程更改的值

ios - UIActivityViewController 不在 gmail 中显示正文

objective-c - iOS 6 无法自动旋转

git - 使用 Objective-Git 创建存储库

c - pthreads 内部是否忙于等待?

multithreading - Golang sleep 线程而不是忙于等待