Ограничения Cocoa, вызывающие высокую загрузку процессора

Недавно я переключился на NSLayoutConstraintв своем приложении и внезапно заметил, что в некоторых представлениях мое приложение постоянно использует около 20% или более ЦП. Как я уже сказал, это происходит только тогда, когда некоторые виды отображаются на экране, и только после того, как я переключился на ограничения.

Запустив профилировщик времени, я заметил, что [NSView displayIfNeeded]постоянно вызывается в этих представлениях, даже если ничего не происходит, никаких событий или взаимодействий с пользователем. Кроме того, если я изменю размер своего окна, я могу найти определенную конфигурацию, в которой загрузка ЦП снижается до нормальных значений. Если я верну окну его первоначальный размер, загрузка ЦП снова возрастет, и [NSView displayIfNeeded]снова будет вызываться постоянно.

Кажется, что существуют определенные комбинации представлений и размеров, которые постоянно обновляются, даже если ограничения не падают (никаких признаков ошибки неудовлетворительных ограничений в консоли ).

Кто-нибудь испытал это? Или, по крайней мере, знает, как лучше отслеживать проблему?

После нескольких проб и ошибок я сузил его до этого видаTableview cell

Это пользовательская ячейка в TableView. Если я заменю его обычной ячейкой, использование процессора вернется к норме. Я также проверил, что макет не является двусмысленным.

14
задан Maxim Makhun 6 January 2014 в 09:16
поделиться