Skip to content

Commit da9a1ff

Browse files
committed
fix(UI): 确保 UI 窗体信息在所有路径下正确释放
将 ReferencePool.Release(openUIFormInfo) 移入 finally 块, 避免异常或提前返回路径下资源泄漏。
1 parent 313bfbc commit da9a1ff

1 file changed

Lines changed: 21 additions & 15 deletions

File tree

Runtime/UIManager.Open.cs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -345,25 +345,31 @@ private IUIForm LoadAssetFailureCallback(string uiFormAssetPath, string uiFormAs
345345
throw new GameFrameworkException("Open UI form info is invalid.");
346346
}
347347

348-
if (m_UIFormsToReleaseOnLoad.Contains(openUIFormInfo.SerialId))
348+
try
349349
{
350-
m_UIFormsToReleaseOnLoad.Remove(openUIFormInfo.SerialId);
351-
ReferencePool.Release(openUIFormInfo);
352-
var uiForm = GetUIForm(openUIFormInfo.SerialId);
353-
return uiForm;
354-
}
350+
if (m_UIFormsToReleaseOnLoad.Contains(openUIFormInfo.SerialId))
351+
{
352+
m_UIFormsToReleaseOnLoad.Remove(openUIFormInfo.SerialId);
353+
var uiForm = GetUIForm(openUIFormInfo.SerialId);
354+
return uiForm;
355+
}
355356

356-
m_UIFormsBeingLoaded.Remove(openUIFormInfo.SerialId);
357-
string appendErrorMessage = Utility.Text.Format("Load UI form failure, asset name '{0}', error message '{1}'.", uiFormAssetName, errorMessage);
358-
if (m_OpenUIFormFailureEventHandler != null)
357+
m_UIFormsBeingLoaded.Remove(openUIFormInfo.SerialId);
358+
string appendErrorMessage = Utility.Text.Format("Load UI form failure, asset name '{0}', error message '{1}'.", uiFormAssetName, errorMessage);
359+
if (m_OpenUIFormFailureEventHandler != null)
360+
{
361+
OpenUIFormFailureEventArgs openUIFormFailureEventArgs = OpenUIFormFailureEventArgs.Create(openUIFormInfo.SerialId, uiFormAssetName, openUIFormInfo.PauseCoveredUIForm, appendErrorMessage, openUIFormInfo.UserData);
362+
m_OpenUIFormFailureEventHandler(this, openUIFormFailureEventArgs);
363+
var uiForm = GetUIForm(openUIFormInfo.SerialId);
364+
return uiForm;
365+
}
366+
367+
throw new GameFrameworkException(appendErrorMessage);
368+
}
369+
finally
359370
{
360-
OpenUIFormFailureEventArgs openUIFormFailureEventArgs = OpenUIFormFailureEventArgs.Create(openUIFormInfo.SerialId, uiFormAssetName, openUIFormInfo.PauseCoveredUIForm, appendErrorMessage, openUIFormInfo.UserData);
361-
m_OpenUIFormFailureEventHandler(this, openUIFormFailureEventArgs);
362-
var uiForm = GetUIForm(openUIFormInfo.SerialId);
363-
return uiForm;
371+
ReferencePool.Release(openUIFormInfo);
364372
}
365-
366-
throw new GameFrameworkException(appendErrorMessage);
367373
}
368374
}
369375
}

0 commit comments

Comments
 (0)