Choose your operating system:
Windows
macOS
Linux
多播委托拥有大部分与单播委托相同的功能。它们只拥有对对象的弱引用,可以与结构体一起使用,可以四处轻松复制等等。
就像常规委托一样,多播委托可以远程加载/保存和触发;但多播委托函数不能使用返回值。它们最适合用来
四处轻松传递一组委托。
事件是一种特殊类型的多播委托,它在访问"Broadcast()"、"IsBound()"和"Clear()"函数时会受到限制。
声明多播委托
多播委托在声明方式上与声明标准委托相同,只是前者使用特定于多播委托的宏变体。
声明宏 |
说明 |
---|---|
|
创建一个多播委托。 |
|
创建一个动态多播委托。 |
绑定多播委托
多播委托可以绑定多个函数,当委托触发时,将调用所有这些函数。因此,绑定函数在语义上与数组更加类似。
函数 |
说明 |
---|---|
"Add()" |
将函数委托添加到该多播委托的调用列表中。 |
"AddStatic()" |
添加原始C++指针全局函数委托。 |
"AddRaw()" |
添加原始C++指针委托。原始指针不使用任何类型的引用,因此如果从委托下面删除了对象,则调用此函数可能不安全。调用Execute()时请小心! |
"AddSP()" |
添加基于共享指针的(快速、非线程安全)成员函数委托。共享指针委托保留对对象的弱引用。 |
"AddUObject()" |
添加基于UObject的成员函数委托。UObject委托保留对对象的弱引用。 |
"Remove()" |
从该多播委托的调用列表中删除函数(性能为O(N))。请注意,委托的顺序可能不会被保留! |
"RemoveAll()" |
从该多播委托的调用列表中删除绑定到指定UserObject的所有函数。请注意,委托的顺序可能不会被保留! |
"RemoveAll()"将删除绑定到所提供指针的所有已注册委托。切记,未绑定到对象指针的原始委托不会被该函数所删除!
请参阅"DelegateSignatureImpl.inl"(位于"..\UE4\Engine\Source\Runtime\Core\Public\Delegates\"中)了解这些函数的变体、参数和实现。
多播执行
多播委托允许您附加多个函数委托,然后通过调用多播委托的"Broadcast()"函数一次性同时执行它们。多播委托签名不得使用返回值。
在多播委托上调用"Broadcast()"总是安全的,即使是在没有任何绑定时也是如此。唯一需要注意的是,如果您使用委托来初始化输出变量,通常会带来非常不利的后果。
调用"Broadcast()"时绑定函数的执行顺序尚未定义。执行顺序可能与函数的添加顺序不相同。
函数 |
说明 |
---|---|
"Broadcast()" |
将该委托广播给所有绑定的对象,但可能已过期的对象除外。 |