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.