Оптимизация компилятора и рамка UIView на iPhone - PullRequest
2 голосов
/ 25 января 2012

У меня странная ошибка, когда мое настраиваемое подпредставление появляется в совершенно неправильном месте на экране оптимизации, но работает безупречно, когда оптимизация выключена.

Вот соответствующий фрагмент:

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 равна 92, но после установки в прямоугольник, а затем в 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));

1 Ответ

3 голосов
/ 25 января 2012

Добавьте -mno-thumb к вашим флагам компилятора. Это известная проблема с ориентацией Xcode 4.2 на armv6 в режиме Thumb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...