Добрый день. есть код, который:
- создает поток TLoader
- в потоке создает объекты TIdHTTP, TIdSSLIOHandlerSocketOpenSSL, TIdCompressorZLib, TMemoryStream (для загрузки страницы)
можно создавать все эти объеты в конструкторе и уничтожать в деструкторе и использовать в загрузчике:
Код:
type
TLoader = class(TThread) (*создаем свой класс на базе ПОТОК*)
private
FUrl:string;
FText:string;
FIdHttp:TidHTTP;
FSSL:TIdSSLIOHandlerSocketOpenSSL;
FCompressZLib:TIdCompressorZLib;
FStream:TMemoryStream;
protected
function LoadURL(const Url: String): string;(*загрузчик страницы: кодировка; удаление скриптов*)
function LoadHtmlPage(const Url:string):string; (*закачка простых фреймов, использует LoadURL*)
.....................................
constructor TLoader.Create(const Str,Text:string);
begin
inherited Create(False); (*Поток создаем в состоянии ЗАПУСК*)
FIdHttp := TIdHTTP.Create(nil);
FSSL := TIdSSLIOHandlerSocketOpenSSL.Create;
FCompressZLib:=TIdCompressorZLib.Create(FIdHttp);
FStream:=TMemoryStream.Create;
FreeOnTerminate := True; (* Поток освободит ресурсы при окончании работы*)
Self.Priority := tpNormal;
FUrl:=Str;
FText:=Text;
end;
..................................
function TLoader.LoadURL(const Url: String):string;
begin
FIdHttp.IOHandler:=FSSL;
FIdHttp.Compressor:=FCompressZLib;
FIdHttp.Get(Url, FStream);
end; (*очень упрощенная версия кода*)
Однако метод LoadURL при загрузке страниц на ФРЕЙМ может вызывться (в выше стоящей функции LoadHtmlPage) многократно
Вопрос: правильно ли создавать объекты в конструкторе или надо перенести их создание в метод LoadURL , с точки зрения правильного кодирования
Код:
function TLoader.LoadURL(const Url: String):string;
begin
FIdHttp := TIdHTTP.Create(nil);
FStream := TMemoryStream.Create;
SSL:=TIdSSLIOHandlerSocketOpenSSL.Create;
CompressZLib:=TIdCompressorZLib.Create(FIdHttp);
FIdHttp.IOHandler:=FSSL;
FIdHttp.Compressor:=FCompressZLib;
FIdHttp.Get(Url, FStream);
FreeAndNil(FStream);
FreeAndNil(SSL);
FreeAndNil(CompressZLib);
FreeAndNil(FIdHttp);
end; (*очень упрощенная версия кода*)