我有一个有趣的案例给你.并需要帮助.
我的Mac应用程序有一个层托管的NSView,里面有很多层,子层和子子层.想象一个带有项目(图标,文本标签)的Finder窗口......就像那样.每个项目都有一个按钮,选择背景图层.
一切都很好,直到你有1000个这样的项目.
现在有很多这些项目,当我尝试与此视图交互时,我的应用程序变得没有响应.而棘手的部分是它不是我的应用程序消耗CPU,而是WindowServer.它达到100%并且系统冻结一段时间.
重要的提示:
我的观点是app界面的一部分.有一个主窗口,其他视图.它们也有自己的结构.
而且我注意到,如果我把这个图层托管的视图放到一个单独的窗口中,它可以正常工作,没有冻结具有相同的1000个项目.但是如果我把它放回主窗口就开始停止系统.
问题
我的应用程序(视图/图层)是什么让WindowServer发疯?
为什么将此视图放在单独的窗口有帮助?
我已经进行了一些测试并删除了每个项目的所有子图层,每个项目只留下一两个.它减轻了系统的负担,但仍然很糟糕.我已经禁用了所有图纸 - 只是图标的小图像.没有帮助.