TObjectList<T> hat eine Property OwnsObjects - steht diese auf true, kümmerst sich die Objektliste um die Freigabe der zugehörigen Objekte - steht sie auf false, musst du dich selbst drum kümmern. Verwendest du diese Objekte also an anderer Stelle wieder, sollte OwnsObjects auf false stehen, sonst werdne beim Clear alle Items ge"free"t.
Die werden eben nicht
ge"free"t sondern
ge"DisposeOf"t und das ist gerade unter ARC wichtig zu wissen.
Kleines Beispiel:
Delphi-Quellcode:
var
a,b : TFoo;
a := TFoo.Create();
b := a;
a.Free();
Ohne ARC haben wir in
b
jetzt einen
dangeling pointer (zeigt auf eine nicht mehr vorhandene Instanz).
Mit ARC haben wir in
b
eine Referenz auf eine lebende Instanz.
Delphi-Quellcode:
var
a,b : TFoo;
a := TFoo.Create();
b := a;
a.DisposeOf();
Ohne ARC haben wir in
b
jetzt einen
dangeling pointer (zeigt auf eine nicht mehr vorhandene Instanz).
Mit ARC haben wir in
b
eine Referenz auf eine (halbwegs) lebende Instanz, die allerdings den Status
TObject.Disposed hat (und somit ein vergleichbarer Status wie ohne ARC).
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)