У меня странная ошибка, когда мое настраиваемое подпредставление появляется в совершенно неправильном месте на экране оптимизации, но работает безупречно, когда оптимизация выключена.
Вот соответствующий фрагмент:
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));