gpt4 book ai didi

iphone - iPhone 上的编译器优化和 UIView 框架

转载 作者:行者123 更新时间:2023-12-03 20:52:51 25 4
gpt4 key购买 nike

我遇到了一个奇怪的错误,我的自定义 subview 在优化时出现在屏幕上完全错误的位置,但在关闭优化时却可以完美地工作。

这是相关的片段:

CGPoint newPoint = [self locationOfItem:i];
NSLog(@"setting new point to %@", NSStringFromCGPoint(newPoint));

CGRect newFrame = CGRectMake(newPoint.x, newPoint.y, view.frame.size.width, view.frame.size.height);
view.frame = newFrame;
NSLog(@"cell frame is %@ %@", NSStringFromCGRect(view.frame), NSStringFromCGRect(newFrame));

如果没有优化,这可以完美地工作。在除 -O0 之外的任何优化标志下(我使用 -Os 但任何非零优化级别都会出现问题),我得到:

2012-01-24 18:37:11.881 MyApp[36498:707] setting new point to {8, 92}
2012-01-24 18:37:11.884 MyApp[36498:707] cell frame is {{8, 8}, {68, 80}} {{8, 8}, {68, 80}}

坦率地说,这是一个可怕的回应。

注意,newPoint 的 y 坐标是 92,但是设置成 rect 然后传递给 UIView#setFrame 后,它变成了 8,这完全打破了我的显示逻辑。

这是怎么回事?优化如何导致这种情况发生?

我使用的是 LLVM 3.0、Xcode 4.2.1,编译为armv6。

更新:

下面的代码似乎工作正常:

    CGRect frame;
frame.origin = newPoint;
frame.size = view.frame.size;
view.frame = frame;
NSLog(@"setting cell frame3 to %@ %@", NSStringFromCGRect(view.frame), NSStringFromCGRect(frame));

最佳答案

-mno-thumb 添加到您的编译器标志中。这是针对 Thumb 模式下的 armv6 的 Xcode 4.2 的一个已知问题。

关于iphone - iPhone 上的编译器优化和 UIView 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8995991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com