Zwingt ein Objekt freigeben unter ARC
Arbeite ich an einer iPad-Foto-collage-app, die zieht vielleicht Hunderte von UIImageView
s gleichzeitig auf dem Bildschirm.
Gibt es eine Schaltfläche, über die der Benutzer "re-create", das ist wohl zum ausführen einer for
Schleife [photo removeFromSuperview]
auf alle Fotos und initialisieren Sie eine neue charge, in dieser Reihenfolge.
Bin ich mit der ARC, und meine Konsole sagt mir, dass mein Photo
's dealloc
Methode nicht aufgerufen wird, bis NACH den nächsten Stapel mit der gezeichnet wurde, das heißt, ich bin in Speicherprobleme, obwohl ich versuche, mich zu entfernen, den ersten Satz, bevor man den nächsten Satz.
Gibt es eine Möglichkeit, entweder 1) warten Sie, bis alle Fotos richtig dealloc würde oder 2) zwingen, alle Fotos zu dealloc sofort unter ARC?
autorelease
könnte in einer Verschiebung des release der Speicher bis zum Ende der aktuellen Schleife. Wenn Sie immer noch Probleme, Sie werden wahrscheinlich brauchen, um uns zu zeigen code-snippet, wie Ihr das erstellen, hinzufügen, und speichern Sie alle Verweise auf die Bilder und deren Bild-Ansichten. Aber wenn ich das Bild entfernen anzeigen und erstellen neue, die dealloc für den alten passiert, bevor ich zu der Schaffung des neuen.InformationsquelleAutor user339946 | 2012-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie wahrscheinlich setzen Sie Ihre Bild-Ansichten in einem autorelease pool ohne es zu merken. Sie können in der Lage sein, dies zu beheben, durch das einwickeln von Ihren eigenen autorelease-pool, um deine for-Schleife.
Zum Beispiel machte ich einen sehr einfachen test-Projekt mit einem Bild anzeigen und ein-Knopf unter meiner top-level-Sicht. Wenn ich Tippen Sie auf die Schaltfläche, entfernt es die Bild-Ansicht und eine neue erstellt. Es entfernt das Bild anzeigen, indem die Schleife über die top-level-Ansicht Unteransichten. Hier ist der code:
Wenn ich diese lief unter der Zuweisungen instrument "Aufnahme Referenz zählt" aktiviert, ich sah, dass jedes Bild entfernt Ansicht wurde nicht freigegeben, während
destroyImageView
. Stattdessen wurde später aufgehoben, wenn der run-Schleife genannt-[NSAutoreleasePool release]
.Dann änderte ich
destroyImageView
zum verwalten von eigenen autorelease pool:Wenn ich es lief wieder unter die Instrumente, die ich sah, dass jedes Bild entfernt Ansicht wurde aufgehoben während
destroyImageView
am Ende des@autoreleasepool
block.InformationsquelleAutor rob mayoff
ARC
dealloc
s jedes Objekt, auf das es nicht mehr gibt starke Referenzen. Sodealloc
etwas, einfach alle Variablen, die auf Sie zeigen zunil
und stellen Sie sicher, dass das Objekt nicht beteiligt ist keine zirkuläre Referenz.Um es zu verstehen, Lesen Sie über die NSAutoreleasePool und Ausführen Schleifen
InformationsquelleAutor rid