因此updateDisplayList用于布置,定位和调整组件的子项。但是,即使没有对相关属性或子属性进行任何更改,每次调用渲染时都会运行所有代码,这似乎是一种浪费。
我为了性能(在移动设备上工作)解决这个问题的方法是在我重写的updateDisplayList中设置一个标志,让我自己的大小/定位代码的大部分只在第一次运行。
这是一个坏主意/大错误吗?如果我不指望任何影响尺寸/定位的改变,我只是看不到让它每次运行的好处。
答案 0 :(得分:0)
然而,对我而言,让所有代码都运行似乎是一种浪费 调用渲染的时间,即使没有对其进行任何更改 相关财产或儿童财产。
我完全同意。
我为了表现而解决这个问题的方法(在移动设备上工作) 是在我重写的updateDisplayList中设置一个标志,允许一个 我自己的尺寸/定位代码的很大一部分只在第一次运行。
我所做的 - 在Flex框架中非常常见 - 是为每个需要更改的主要项目提供属性。例如,我们的MX AutoCompleteComboBox有一个名为“downArrowVisible”的属性,如果将其设置为false,它将隐藏显示的向下箭头,同时还调整textInput的大小以分布在组件的整个宽度上。如果将其设置为true;它会定位像普通ComboBox一样的项目。
因此,每当属性downArrowVisible发生变化时,我们在那里设置一个标志,downArrowVisibleChanged;并使用该属性来确定updateDisplayList是否应该更改元素的位置。 [它稍微复杂一些,但这就是要点]。 downArrowVisibleChanged的默认值为true,因此在初始设置运行期间,子组件的大小和位置将正确。
这听起来与你正在做的非常相似;因为我从来没有特定于updateDisplayList()的标志属性。我使我的标志特定于布局的某个部分,并且只在updateDisplayList()中将这些标志设置为“不再需要更改”。
这是一个坏主意/大错误吗?我只是看不到好处 如果我不期待任何事情,让它每次都运行 影响尺寸/定位以改变。
我认为这似乎是一种合乎逻辑的方法。您是对的,每次重新绘制组件时都不需要一直运行布局代码。
如果您不想在运行时更改自定义组件的属性,并且只希望updateDisplayList()例程运行一次 - 而且再也不想 - 那么我认为您可以绑定到initialized属性Flex Framework,无需添加自己的布尔值。如果值为false,则组件尚未通过它的初始创建过程。如果值为true则为。