Попробую не плодить тем, спрошу здесь
Цитата:
Сообщение от lmikle
лучше использовать TObjectList.
|
Тщательно рассмотрел данный вариант, все-таки излишняя функциональность, та же история и с TCollection. Буду делать свое "с нуля".
А вопрос возник следующий: как именно следует уничтожать объекты?
Нашел вот это
Код:
unit System;
...
destructor TObject.Destroy;
begin
end;
procedure TObject.Free;
begin
// under ARC, this method isn't actually called since the compiler translates
// the call to be a mere nil assignment to the instance variable, which then calls _InstClear
if Self <> nil then
Destroy;
end;
ну т.е. деструктор вроде как ничего не делает, а фри только проверяет нужно-ли ничего не делать или можно ничего не делать.
В одном месте прочитал туманное объяснение что TObject - прародитель всех объектов и поэтому его деструктор вызывается как-то хитро и он все-таки что-то делает, но подробностей я так и не понял. И в комменте написано: "в ARC этот метод фактически не вызывается, поскольку компилятор преобразует вызов в простое присваивание переменной экземпляра nil, которое затем вызывает _Its Clear"
Ну т.е. это и все, можно со спокойным сердцем считать что память из-под объекта освободилась?
И еще:
Код:
TPartForProduct = class(TObject)
private
FIndx: Word;
FCheckID: string;
FCount: Byte;
public
property Indx: Word read FIndx write FIndx;
property CheckID: string read FCheckID write FCheckID;
property Count: Byte read FCount write FCount;
end;
TPartList = array of TPartForProduct;
TProduct = class(TObject)
private
FName: string;
FAlias: string;
FPartList: TPartList;
function GetPartListCount: Byte;
procedure SetPartListCount(const Value: Byte);
public
function IncPartSet:TPartForProduct;
property Name: string read FName write FName;
property Alias: string read FAlias write FAlias;
property PartList: TPartList read FPartList write FPartList;
property PartListCount: Byte read GetPartListCount write SetPartListCount;
end;
1- В TProduct.Destroy ведь нужно пройтись по массиву и так же вызвать TPartForProduct.Free?
2-На данный момент в объектах только строки и числа, а как быть со всякими StringList или JPEGImage? Их тоже удалять в ручную?