Hallo zusammen,
wie funktioniert der Weak-Mechanismus intern ?
Ich habe mir das nicht genau angesehen, ich vermute aber das hierbei einfach keine Referenzen gezählt werden sollten.
Leider habe ich Probleme mit 10.2 und ImageList und ListBox Glyphs.
Im Code ImageList steht Folgendes:
Delphi-Quellcode:
TCache = class
private type
TBitmapCacheItem = record
Size: TSize;
Index: Integer;
[Weak] Bitmap: TBitmap; // Das Bitmap sollte WEAK gespeichert sein
end;
procedure TCache.Add(const Size: TSize; const Index: Integer; const Bitmap: TBitmap);
var
NewItem: TBitmapCacheItem;
begin
if (FCacheSize > 0) and (Bitmap <> nil) then
begin
if FList <> nil then
while FCacheSize <= FList.Count do
begin
FList[0].Bitmap.DisposeOf;
FList.Delete(0);
end
else
FList := TList<TBitmapCacheItem>.Create;
NewItem.Size := Size;
NewItem.Index := Index;
NewItem.Bitmap := Bitmap;
{$IFDEF AUTOREFCOUNT}
NewItem.Bitmap.__ObjAddRef; // Ist das korrekt ? Das wird zumindest bei Android aufgerufen.
{$ENDIF}
FList.Add(NewItem);
end;
end;
Ist das so korrekt, oder sollte das RefCount nicht eigentlich ignoriert werden, oder zumindest mit einen weiteren Define WEAKREFCOUNT oder so abgesichert sein ?
Rollo