【发布时间】:2012-01-02 08:33:47
【问题描述】:
我有一些代码试图修改一个 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
iPhone 3G 运行 4.2 固件和 Release Build 的结果(这发生在任何固件上):
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 的构建设置中的某些内容吗?
【问题讨论】:
-
听起来像是某种竞争条件。
-
在设置
frame.origin.x的行之前添加某种睡眠调用(或 spinwait)。如果这样可以解决问题,那么您就有了一个竞争条件,您应该使用适当的同步来修复它。