2016-12-04 2 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()으로 전달하십시오.

관련 문제