Joh*_*ith 5 iphone xcode cocoa-touch
我有一个程序在Debug配置中在设备上运行良好,但作为Release发布失败.任何人都有这种经历,我该如何解决?
谢谢
an *_* yu 15
我遇到了同样的问题 - 在调试模式下,应用程序在模拟器和设备上工作正常,但在发布模式下都没有(它会安装,但只显示启动画面)
我一直看到StackOverflow上的答案说这是一个内存管理问题,但这对我来说没有任何意义,因为调试版在加载到我的iPhone 4S时工作得非常好.我还检查了Build Settings,看看两种模式之间有什么不同,我跳过了最后一个重要的区别 - 编译器优化.
在Build Settings - > Apple LLVM编译器3.1代码生成 - >优化级别下,将Release设置从默认的Fastest,Smallest [-Os]更改为None [-O0].解决了我的问题.
在此博客文章中找到该解决方案:http://www.mindjuice.net/2011/11/30/how-to-fix-an-app-that-crashes-in-release-but-not-debug/.
在苹果的文档帮助,但并不能解释为什么这样做正好相反修复的事情:
由于优化过程中涉及的额外工作,任何类型的代码优化都会导致构建时间变慢.如果您的代码正在改变,就像在开发周期中那样,您不希望启用优化.但是,当您接近开发周期的末尾时,发布版本配置可以指示您的成品大小,因此最快,最小的选项是合适的.
无:编译器不会尝试优化代码.在开发期间,当您专注于解决逻辑错误并需要快速编译时,请使用此选项.请勿使用此选项来运送可执行文件.
最快,最小:编译器执行通常不会增加代码大小的所有优化.这是传送代码的首选选项,因为它为您的可执行文件提供了更小的内存占用.
你所说的“失败”是什么意思?碰撞?悬挂?被抛弃以供内存使用?失败的症状是什么?有回溯吗?您的代码中是否有任何内容在调试与发布中表现不同?有什么#ifdef DEBUG类型的恶作剧吗? asserts有副作用吗?你是否搞乱了编译器设置?有C++吗?集会?
我在评论中看到了一丝线索;非法访问变量。最有可能的是,这是由于优化器在发布时比调试时更快地重新使用堆栈槽造成的。一般来说,这可以归结为过度释放问题。
即使在构建发布时,您仍然可以打开僵尸检测。
另外,您是否完成了构建并分析并修复了它指出的任何问题?
| 归档时间: |
|
| 查看次数: |
3216 次 |
| 最近记录: |