创建GUILayoutOption是否会分配内存?

时间:2016-12-04 12:23:22

标签: c# unity3d

我想为GUI元素添加一些选项。例如,像这样:

GUILayout.Button("Click me!", GUILayout.Width(someValue));

我的问题是对GUILayout.Width()的调用是否在堆上创建了一个新对象,缓存了值,还是返回了一个结构?因为如果它每次都创建一个新实例,那么在开始时创建它可能是值得的,而不是在每次调用OnGUI()时创建它,以避免过多的垃圾收集。

1 个答案:

答案 0 :(得分:1)

每次调用GUILayoutOption时,它都会创建GUILayout.Width()的新实例。以下是Unity源代码支持此内容的一些片段:

每次调用GUILayout.Width() 时都会创建一个新实例 GUILayout.cs -- Line #903

public static GUILayoutOption Width(float width)
{
    return new GUILayoutOption(GUILayoutOption.Type.fixedWidth, width);
}

GUILayoutOption是一个类,而不是结构
GUILayoutOption.cs -- Line #5

public sealed class GUILayoutOption

另一方面注意:GUILayout.Button的调用需要params GUILayoutOption[],因此它会在每次调用时隐式创建一个新数组。如果您希望缓存GUILayoutOption,您可以将它们缓存在数组中并将其传递给GUILayout.Button()