문제

LUA 매뉴얼을 읽었지만 확실한 답변을 제공하지 않았습니다.

인덱스 배열 역할을하는 LUA 테이블이 있다고 가정 해 봅시다.

local myArray = {};
myArray[1] = "Foo";
myArray[2] = "Bar";

이 테이블을 어떻게 가장 잘 처리합니까? myArray를 nil로 설정합니까? 아니면 배열을 통해 반복하고 각 색인화 된 요소를 nil로 설정해야합니까?

마찬가지로, 사전 역할을하는 LUA 테이블이 있다고 가정 해 봅시다.

local myDictionary = {};
myDictionary["key1"] = "Foo";
myDictionary["key2"] = "Bar";

'myDictionary'를 nil로 설정하거나 반복해야합니까?

마지막으로, 테이블 중첩 된 곳에 메모리 관리 현명한 작업은 무엇입니까? 예를 들어

local myNestedCollection = {};
myNestedCollection[1] = {1, 2, 3};
myNestedCollection[2] = {4, 5, 6};

이 서브 테이블 각각을 반복하여 NIL로 설정해야합니까? 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

대부분의 GC에서는 언급이 없을 때 객체가 수집됩니다. 참조 체인의 상단을 NIL로 설정하면 어린이에 대한 참조가 제거됩니다. 그것이 유일한 참조라면 아이들이 수집됩니다.

다른 팁

로컬 변수를 nil; 모든 열쇠를 반복 할 필요가 없습니다. nil 에게. 에 따르면 이 페이지, LUA는 마크 앤 스웨프 쓰레기 수집 알고리즘을 사용합니다. 로컬 변수를 설정하자마자 nil, 테이블의 키는 도달 할 수 없게되므로 다음 컬렉션에서 쓰레기 수집가가 수집합니다. 마찬가지로, 해당 객체도 테이블이면 키도 연락 할 수 없게되므로 수집됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top