2016-12-04 84 views
0

我想添加一些選項到GUI元素。例如,像這樣:是否創建GUILayoutOption分配內存?

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

我的問題是調用GUILayout.Width()是否在堆上創建一個新對象,緩存值,或返回一個結構?因爲如果它每次都創建一個新實例,那麼可以在開始時創建一次,而不是在每次調用OnGUI()時創建一次,以避免過多的垃圾回收。

回答

1

每當您撥打GUILayout.Width()時,它會創建一個GUILayoutOption的新實例。下面是從統一的源代碼中的一些片段支持這一點:

它創建在每次調用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()