调试/发布之间的iOS精度差异构建了混乱的视图?

时间:2012-01-01 22:47:43

标签: iphone ios build

我有一些代码,我正在尝试修改一个CGRect的属性,并使用这个新框架设置另一个CGRect:

actView         = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray ] autorelease];
actView.hidesWhenStopped = NO;
[actView startAnimating];
frame           = actView.frame;
frame.origin.x  = mainLabel.frame.origin.x - frame.size.width - TBLCELLPADDING;
frame.origin.y  = mainLabel.frame.origin.y;
actView.tag     = TBLCELLACTTAG;
actView.frame   = frame;
[cell.contentView addSubview:actView];

这适用于较新的iPhone的调试版本和发布版本。然而,在3G iPhone的发布版本上运行会产生一些疯狂的结果,并且会混淆视图。

预期结果(适用于较新的手机):

2012-01-01 14:41:43:449 myapp [691:775] Loading MainLabel: 122.000000 26.000000
2012-01-01 14:41:43:605 myapp[691:775] Loading Frame: 97.000000 26.000000
2012-01-01 14:41:43:713 myapp[691:775] Loading ActView: 97.000000 26.000000

运行带有发布版本的4.2固件的iPhone 3G的结果(这种情况发生在任何固件上):

2012-01-01 14:43:39:516 myapp[706:775] Loading MainLabel: 122.000000 26.000000
2012-01-01 14:43:39:589 myapp[706:775] Loading Frame: 26.000000 26.000000
2012-01-01 14:43:39:792 myapp[706:775] Loading ActView: 26.000000 0.000000

这会破坏我的应用程序中所有旧版iPhone的视图 有没有办法在代码方面专门处理这个问题?或者我应该修改旧版iPhone的构建设置中的内容吗?

2 个答案:

答案 0 :(得分:3)

由于此问题仅存在于基于ARMV6的设备上,并且仅在构建优化代码时才存在,因此可能存在于llvm的错误ARMV6优化中。

将以下内容添加到构建设置中作为用户定义的设置:

GCC_THUMB_SUPPORT = NO

这应该是这样的: enter image description here

这样做,它完全禁用了应用程序的拇指指令集构建。如果这导致应用程序正常运行,请检查应用程序是否仍在ARMV7设备上正常运行,因为此设置可能会严重影响性能。

尽管这似乎是GCC特定的设置,但仍然受到LLVM的尊重,并且在我需要更新的一些旧项目中保留了我的背后。

答案 1 :(得分:0)

如果应用程序在较旧的手机上运行,​​您可以随时指定不同的代码设置。使用预编译器标题。