Dieser Code ist gemeint. Nach Lukas Aussage wird y und z nicht freigegeben, da nichts mehr darauf zeigt (ich hoffe, ich gebe das richtig wider).Ich weiß jetzt nicht genau, von welchem Code du sprichst, da hier ja schon einiger herumfliegt.
Quellcode
- MyObject* object = [[MyObject alloc] init] //x hat nen RC1 durchs alloc
- [object setField1:[[MyObject alloc] init]] //y hat nen RC1 durchs alloc, RC2 durch den Retain-Setter
- [object setField2:[[MyObject alloc] init]] //z hat nen RC1 durchs alloc, RC2 durch den Retain-Setter
- [object setField1:[object field2]] //x RC1, y RC1 durchs Release im Setter, z RC3 durch den zweiten Setter
- [object release]; // x RC0 durchs Release, y bleibt bei RC1, z RC1 durchs Release von field1 und field2
Nachdem desöfteren der Tipp mit dem ARP kam, war die Frage, ob ich dieses Leck umgehen kann, wenn ich alle Objekte in diesem Schnippsel gleiche autorelease um so zu verhindern, dass mir die ursprüngliche Referenz verschüttgeht und ich nicht mehr freigeben kann.
Hans