Ich verstehe, dass Sie mit autorelease
auf iOS vorsichtig sein müssen. Ich habe eine Methode, die ein Objekt zurückgibt es alloc
s, die von dem Aufrufer benötigt wird, so in dieser Situation - wie ich es verstehe - ich muss autorelease
an das Objekt im Aufgerufenen senden, bevor es zurückkehrt.Wann bewirkt Autorelease tatsächlich eine Veröffentlichung in Cocoa Touch?
Dies ist in Ordnung, aber sobald die Steuerung zum Telefon zurückkehrt (d. H. Nachdem mein Knopfklick verarbeitet wurde), scheint der Autorelease-Pool freigegeben zu sein. Ich vermute, dass es so ist, wie es sein sollte, aber ich frage mich, was ist die beste Praxis für diese Situation.
Ich habe eine Nachricht retain
von dem Aufrufer gesendet, so dass das Objekt nicht freigegeben wird, und es dann explizit in dealloc
freigeben.
Ist dies der beste Ansatz?
Streng genommen, auch das ist nicht garantiert, da Sie einen Pool in einem Verfahren schaffen könnten, einige Objekte Autorelease, und lassen Sie das Pool in einem anderen Verfahren. Ein zweifelhaftes Design, aber gültig: Die Objekte werden von der Erstellung des Pools bis zur Entwässerung des Pools reichen, unabhängig von der Methode, mit der der Pool erstellt wurde. –