Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.780 Beiträge
 
Delphi 12 Athens
 
#2

AW: [Firemonkey, Android] TImageList Weak Bitmap im Cache

  Alt 1. Mai 2017, 14:42
Delphi-Quellcode:
{$IFDEF AUTOREFCOUNT}
NewItem.Bitmap.__ObjAddRef;
{$ENDIF}
Damit erzeugst du eine virtuelle Variable und umgehst das Weak doch wieder, da RefCount nie 0 wird.

[Weak] in iOS/Android (sonst gibt es ARC nirgendwo) bedeutet nur, dass diese Variable erstmal nicht gezählt wird
und wenn die verlinkte Instanz freigegeben wird (RefCount=0), dann wird diese Variable auf nil gesetzt. (dafür gibt es eine globale Liste aller Weak-Variablen)

Also, das Bitmap ist irgendwo noch mindestens in einer anderen Variable und wenn diese anderen Variablen alle geleert sind, dann wird auch deine Weak-Variable auf nil gesetzt.

PS: mit NewItem.Bitmap.FreeNotification(Self); würde auch noch ein TCache.Notification aufgerufen und du könntest auch das ganze Cache-Item gleich mit entsorgen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Mai 2017 um 14:48 Uhr)
  Mit Zitat antworten Zitat