UE4 Unlua源码解析12 - Lua与UE4的混合GC
Posted 珞珈大胖强TURBO
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 Unlua源码解析12 - Lua与UE4的混合GC相关的知识,希望对你有一定的参考价值。
Lua与UE4的混合GC
我们知道,UE4中实现了AddReferencedObjects接口,或者用UPROPERTY宏标记的对象,会被纳入自动GC管理中,当没有对象引用此Object时,自动GC,Lua也是类似,当一个表没用其他对象引用的时候,会自动GC,那么Unlua中,我们可以看到UObject除了被UE引用,还会被Lua端引用,那么假如什么都不管,UE的对象在不被引用的时候自动GC,但是Lua还引用他,便会访问到脏数据,那么Unlua是怎么解决的呢?
怎么做到Lua中持有的UE对象,不被UE GC
Lua对象在和UObject绑定的时候,会在代码中将UObject加入不GC的对象FGCObject的ReferencedObjects,这样,确保了Lua中访问的UObject对象实例不会被UE GC自动回收
怎么做到Lua中停止持有UE对象时,UE也能GC掉
当Lua中停止持有UE对象时,需要手动调用Destroy方法
Destroy对应C方法UObject_Release
可以看到在ReleaseAttachedObjectLuaRef方法中移除了Registry引用,并且把UE对象从AttachedObjects移除
怎么做的UE中持有的Lua对象,不被Lua GC
UE中使用Lua对象的时候,会主动把Lua对象加入到Lua全局表Registry中,确保Lua GC时标记时通过引用链中找到该Lua对象,防止被回收
怎么做到UE中停止持有Lua对象时,Lua能GC掉
也就是从UE中,把Lua对象从全局REGISTRY表中移除
以上是关于UE4 Unlua源码解析12 - Lua与UE4的混合GC的主要内容,如果未能解决你的问题,请参考以下文章
UE4 Unlua源码解析12 - Lua与UE4的混合GC
UE4 Unlua源码解析8 - Lua与C++之间的参数转换的实现原理
UE4 Unlua源码解析8 - Lua与C++之间的参数转换的实现原理
UE4 Unlua源码解析8 - Lua与C++之间的参数转换的实现原理