14

最近アプリを切り替えましNSLayoutConstraintたが、一部のビューで、アプリが常にCPUの約20%以上を使用していることに突然気づきました。私が言ったように、それはいくつかのビューが画面上にあるとき、そして私が制約に切り替えた後にのみ起こります。

[NSView displayIfNeeded]タイムプロファイラーを実行することにより、何も起こらず、イベントやユーザーの操作がない場合でも、これらのビューで常に呼び出されることに気付きました。また、ウィンドウのサイズを変更すると、CPU使用率が通常の値に低下する特定の構成を見つけることができます。ウィンドウを元のサイズに戻すと、CPU使用率が再び増加し、[NSView displayIfNeeded]常に呼び出されます。

制約がクラッシュしていなくても、ビューとサイズの特定の組み合わせが常に更新されているようです(コンソールに不満足な制約エラーの兆候はありません)。

誰かがこれを経験しましたか?または、少なくとも問題をより適切に追跡する方法を知っていますか?

少し試行錯誤した後、このビューに絞り込みましたテーブルビューセル

これは、TableViewのカスタムセルです。通常のセルに置き換えると、CPU使用率は通常に戻ります。また、レイアウトが曖昧でないことも確認しました。

4

1 に答える 1

1

これは、制約の丸めの問題が原因でよく発生します。特に「等幅」制約を使用する場合。

等幅制約付きの 2 つのボタン

同様の問題のもう 1 つの原因は、"Center in Container" 制約の使用です。多くの場合、丸めの問題が発生します。

これらの制約のいずれかを使用した場合は制約を確認し、それらの優先度を下げてください。これにより、これらのルールがうまく適合しない場合は無視できます。または、さらに良いことに、中央および等幅/高さの制約なしでレイアウトを作成します。

于 2014-03-03T13:32:43.263 に答える