Widget生命周期和委托重叠连接
再次调用NativeConstruct时出现的问题
该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。
UUserWidget::NativeConstruct()人们很容易认为仅在第一次创建对象时调用一次。 但是,如果将小部件从屏幕上删除并再次添加,则可能会再次调用 Construct。
代表可以冗余连接
void UDailyProblemWidget::NativeConstruct()
{
Super::NativeConstruct();
SubmitButton->OnClicked.AddDynamic(
this,
&UDailyProblemWidget::HandleSubmit
);
}
如果 Construct 被调用两次,则该函数可能会在同一个按钮单击时执行两次。 在存储、扣货、创建节点等逻辑上,对实际数据进行了冗余处理。
在 ProjectDT 中,它被组织为在连接之前删除相同的代理。
if (SubmitButton)
{
SubmitButton->OnClicked.RemoveDynamic(
this,
&UDailyProblemWidget::HandleSubmit
);
SubmitButton->OnClicked.AddDynamic(
this,
&UDailyProblemWidget::HandleSubmit
);
}
NativeOnInitialized 和 NativeConstruct
只需要准备一次的任务NativeOnInitialized()可能更合适。 每次屏幕返回时需要更新的值为NativeConstruct()我在单独的安装函数中处理它。
NativeOnInitialized:在对象的生命周期内一次
NativeConstruct:附加到视图时可以再次调用
NativeDestruct:离开View时调用
在小部件池或重用结构中,对象创建和屏幕显示不应被视为同一事件。 区分每个按钮连接、数据初始化和屏幕更新应该在什么时候执行非常重要。