调用在协程中声明的 System.Action 是否安全?IEnumerator MyCoroutine(){ bool myBool = true; System.Action action = ()=>{myBool=false;} StartCoroutine (MyOtherCoroutine(action));//just launch and forget about it } IEnumerator MyOtherCoroutine(System.Action dangerous_callback){ yield return null; yield return null;//skip several frames yield return null; dangerous_callback.Invoke();//will cause problems? The owner coroutine (and it's myBool) is no longer on stack }我担心的是myBool在第一个协程中分配的。MyCoroutine不等到MyOtherCoroutine完成。我可以看到 System.Action 不会被收集,因为它确实仍然被 引用MyOtherCoroutine,但是MyCoroutine(Action 修改的布尔变量)应该已经被释放了?
2 回答
慕少森
TA贡献2019条经验 获得超9个赞
但这似乎是一个可能的内存泄漏,以后可能无法发现?就问能不能用。
没有内存泄漏。这样做完全没问题,如果您需要在协程函数中进行回调,那就应该这样做。请记住,这是 C# 并且在 C# 中创建内存泄漏比在 C++ 中更难,除非您滥用了一些 Unity 的 API,这些 API 可以在本机(C++)端创建内存泄漏,但这里的情况并非如此。
虽然,你应该检查是否Action
是null
调用它,否则之前,期望在你的代码的一些问题。
if (dangerous_callback != null) dangerous_callback.Invoke();
- 2 回答
- 0 关注
- 212 浏览
添加回答
举报
0/150
提交
取消