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;