Это может быть легко решено на раскадровке:
Выберите представление, которое добавляется как UIBarButtonItem Container & amp; установить его "Clip Subviews" & amp; Запустите приложение.
Хорошо . Вот мое мнение о том, почему?
Если вы конвертируете оба сценария в байт-код, вы заметите, что
Во время тестирования обязательно «разогрейте» JVM перед тем, как принимать меры, иначе вы можете запустить различные действия при запуске на платформе (загрузка класса, JIT-компиляция). Также запускайте тесты много раз подряд. Кроме того, если вы выполнили второй тест во время сборки мусора, это могло иметь влияние. Попробуйте запустить каждый из ваших тестов 100 раз и распечатать время после каждого теста, и посмотрите, что это вам скажет.
Если вы можете устранить потенциальные артефакты во время запуска, как предлагает Джим, то я рискну предположить, что цикл for в стиле Java в Groovy не так хорошо реализован, как исходный стиль Groovy. для цикла. Он был добавлен только в версии 1.5 после запросов пользователей, поэтому, возможно, его реализация была немного запоздалой.
Вы смотрели байт-код, сгенерированный для ваших двух примеров, чтобы увидеть, есть ли какие-либо различия? Здесь было обсуждение производительности Groovy , в котором в одном из комментариев (от одного «johnchase») говорится следующее:
Интересно, связана ли разница, которую вы видели, с тем, как Groovy использует числа (примитивы) - поскольку он включает все примитивы в их эквивалентные классы-оболочки Java (int -> Integer), я полагаю, что это немного замедлит работу. Мне было бы интересно увидеть производительность кода Java, который выполняет 10 000 000 циклов с использованием классов-оболочек вместо целых чисел.
Так, может быть, исходный цикл Groovy for не страдает от этого? Хотя на самом деле это всего лишь предположение с моей стороны.