我仍然对 Flex 中组件的验证和无效感到困惑。谁能给我简单的比较一下验证可以做什么,哪些无效不能做,反之亦然。
我真的很感谢你的帮助。
谢谢。
我仍然对 Flex 中组件的验证和无效感到困惑。谁能给我简单的比较一下验证可以做什么,哪些无效不能做,反之亦然。
我真的很感谢你的帮助。
谢谢。
尽管我确实同意这些评论,但这是有据可查的,我认为您只是错过了“无效”和“验证”方法之间的整体关系。基本上,每当您调用使某些内容无效时,无论是显示列表、大小还是属性,您所做的只是告诉它为其中一个设置一个布尔标志(任何时候您修改将修改的属性这三个中的任何一个都会在调用 set width 时调用适当的 invalidate 方法,例如 invalidateProperties)。当下一个进入帧/渲染发生时,它将检查标志,如果其中任何一个设置为无效,它会调用相应的验证方法(updateDisplayList、commitProperties、measure)。
要在 FB/Eclipse 中查看自己的代码,请按 Ctrl+Shift+T 并拉出 UIComponent,在打开 UIComponent.as 后按 Ctrl+O 并输入 validateNow 您可以看到方法主体是 1 行,并且有一个很好的 ASDoc 注释那里解释了它的作用。更好的是,您会看到它在 ILayoutManager 上调用 validateClient,弹出打开 LayoutManager(再次按 Ctrl+Shift+T)查看 validateClient,它基本上解释了我在这里所做的事情。
我认为这就是您的出发点,因为我也曾在那艘船上,不了解更新属性与影响其兄弟姐妹/父/子之间的关系,但由于可以修改属性,因此这确实是减少处理负载的关键在帧刷新之间多次,它不需要重新计算它周围的所有东西,直到它实际被重绘。
问题是有时您想修改一个属性并立即(即在下一行执行)能够看到它的副作用如何修改布局的其他部分,在这种情况下您可以在修改后调用 validateNow()属性强制它立即更新所有这些,即使它可能在重绘发生之前发生多次。这通常不是一个很好的做法,因为它通常意味着浪费了不希望的 CPU 时间,但有时它是最简单的选择。