我有Xcode 4.3.1,iOS 5.1,并且已启用ARC
来构建我的应用。
现在,应用程序在调试版本中运行良好,但在发布版本上崩溃。差异的可能原因是什么?我完全依靠ARC
进行资源管理。我查看了崩溃日志,它表明已经发布了引用的内存。使用ARC
时,可能导致零售构建问题的常见缺陷是什么?
以下是我从崩溃日志中获得的内容
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x6f636552
Crashed Thread: 0
修改
该应用的部署目标是iOS 5.0。我确实使用互联网连接,当前的崩溃发生在“渲染”从Web服务返回的数据以便在UITableViewController
上显示的时候。整个应用程序正在使用ARC
,但我关闭ARC
的第三方的一些源文件除外。
答案 0 :(得分:4)
每当这种情况发生在我身上时,似乎是因为发布版本在清除弱引用方面更具侵略性。如果您错误地将某些内容分配给弱属性(例如,如果您要添加子视图,您也将保留弱引用),那么在您有任何强引用之前,这可以在调试时发挥作用并在发布时失败。例如(伪代码)
@property (weak) UILabel * label;
...
self.label = [[UILabel alloc] init];
[self.view addSubview:self.label];
...
self.label.text = @"hello";
我已经看到这会导致发布版本上的访问崩溃,并且在调试时不会被注意到。
答案 1 :(得分:0)
我可能没有答案,但我会列出一些让你尝试的事情:
if
语句,而if
语句没有用大括号覆盖它。#if
条件),请确保在构建配置中设置了所需的部分。如果我能想到更多,我会尝试添加它们。
答案 2 :(得分:0)
您是否有不同的发布和调试目标?检查是否为发布目标正确引用了所有文件。
在我们的案例中,发布目标没有看到UIButton上的类别。 ad-Hoc构建很顺利,直到有人调用了该类别实现的方法。由于我们没有存储来自Ad-Hoc构建的存档,因此无法调试崩溃。 (吸取的教训)
不确定它是否在崩溃日志中列为EXC_BAD_ACCESS
,但可以帮助某人识别其特定于发布的崩溃。