【发布时间】:2014-09-11 14:17:32
【问题描述】:
我的应用继承了UITableViewCell 并实现layoutSubviews 来修改单元格contentView 的宽度,如下所示:
- (void)layoutSubviews {
[super layoutSubviews];
// position subviews...
CGRect frame = [[self contentView] frame];
frame.size.width -= 20;
[[self contentView] setFrame:frame];
}
当使用 iOS 8 模拟器和 Xcode 6 GM 种子运行此代码时,这会触发无限循环。但是,在运行 iOS 8 GM 种子的真实 iPhone 或 iPad 上运行时,它不会像以前的 iOS 版本那样循环。
我最初认为区别在于编译器优化,但模拟器在调试配置和发布配置中都循环。
问题
- 为什么 iOS 8 GM 和模拟器有区别?
- 这是一个严重的错误修复吗?即使我无法在设备上重现它,我也非常不愿意发布可能存在严重挂起错误的应用。
- 您认为在 iOS 7 和 6 上进行重构以消除循环而不导致回归的最佳方法是什么?
【问题讨论】:
-
这段代码看起来很糟糕,想象一下屏幕上发生的事情会导致所有视图重新布局它们的子视图:您的内容视图可以轻松地缩小到零宽度。并不是说这就是模拟器上发生的事情,但我相信如果你在解决可能的错误方面有如此好的态度,你不妨解决这个问题。我还没有下载GM种子,然后我会测试你的代码,看看问题是否容易被复制,同时你可以选择其中一个单元格并发布递归的回溯(不是第一个)方法调用。
标签: ios uitableview ios8 infinite-loop layoutsubviews