[Delphi] TObjectList의 활용

from Delphi 2008/01/21 18:33 / hits (387)


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해 준다)


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 임.


아래는 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;
2008/01/21 18:33 2008/01/21 18:33
포스팅이 유익 하셨다면 RSS 구독을 신청하세요

Trackback Address >> http://dolba.net/tt/k2club/trackback/1684