TObjectList는 TList를 상속 받아 구현되었다. (Contnrs.Pas)
TObjectList = class(TList)
TList를 상속받았기 때문에, TList와 거의 사용방법이 비슷하다.
TObjectList 클래스에는 OwnsObjects 라는 Boolean형 프로퍼티가 있는데, 이 값이 True이면 TObjectList에서 Item이 삭제되는 경우에 리스트에서의 삭제 뿐만 아니라, 그 Item 객체의 메모리해제까지 자동으로 수행해주며, False이면 객체 자동 소멸 기능이 수행되지 않는다.
그러므로 False로 놓고 사용하면 TList와 동일하게 사용할 수 있습니다.
객체의 메모리 해제가 일어나는 경우는 아래와 같다.
1. Delete, Remove, Clear 메서드를 호출할 때
2. TObjectList 자체가 소멸될 때(TObjectList의 소멸자가 호출될 때)
3. Item에 새로운 Item이 할당(Assign)될 때 (그 Item에 이전에 있던 객체를 Free해 준다)
2. TObjectList 자체가 소멸될 때(TObjectList의 소멸자가 호출될 때)
3. Item에 새로운 Item이 할당(Assign)될 때 (그 Item에 이전에 있던 객체를 Free해 준다)
TList를 사용할때는 매번 폼이나 프로젝트 종료시 FormDestroy 나 관련 함수에서
TList에 있는 Object를 하나하나 꺼내서 Delete 해 줬는데 TObjectList를 사용하는 경우 List만 Delete하면 List에 Add된 Object는 마치 Form에 올려진 Control들 처럼 모두 Delete가 된다.
FList := TObjectList.Create(True); // OwnsObjects is True.
또는
FList := TObjectList.Create;
FList.OwnsObjects := True;
※ Default는 TRUE 임.
또는
FList := TObjectList.Create;
FList.OwnsObjects := True;
※ Default는 TRUE 임.
아래는 TObjectList의 간단 활용예이다.
TPersonal = Class(TObject) Public Name : String; Sex : String; Age : Integer; End; Function CompareNames(Item1 : TComponent; Item2 : TComponent) : Integer; implementation procedure TObjListSample.CollectionClick(Sender: TObject); var oPersonal : TPersonal; ListPerson : TObjectList; // Penser ? ajouter l'unit? ContNRS begin ListPerson := TObjectList.Create ; oPersonal:=TPersonal.Create ; oPersonal.Name:='홍길동'; oPersonal.Sex:='남' ; oPersonal.Age:=69; ListPerson .Add(oPersonal); oPersonal:=TPersonal.Create ; oPersonal.Prenom := '이순신'; oPersonal.Sex := '남' ; oPersonal.Age := 25; ListPerson .Add(oPersonal); oPersonal:=TPersonal.Create ; oPersonal.Nom :='신사임당' ; oPersonal.Sex :='여'; oPersonal.Age :=37; ListPerson .Add(oPersonal); ListPerson .Sort(@CompareNames); end; function CompareNames(Item1: TComponent ; Item2: TComponent): Integer; begin Result := CompareText((Item1 as TComponent).Name, (Item2 as TComponent).Name) ; end;