Neue Info
ich bestimmen, wo mein Problem liegt, indem ein umgestellt Autofreigabeverfahren zu schaffen.
Ich empfehle das, wenn Sie nicht wissen, was Sie tun, aber das ist, was ich herausgefunden habe.
NSThread erstellt seinen eigenen Thread, die aufgerufene Methode sollte in einen Autorelease-Pool gehüllt werden.
Grand Central Dispatch kümmert sich bei der Verwendung der Befehle "dispatch _..." um die Anpassung über den Autorelease-Pool. wenn Sie jedoch manuell versenden. Vielleicht möchten Sie es in einen Autorelease-Pool einbinden.
Auch behandelt ARC nicht lassen Sie wissen, dass eine Autorelease außerhalb eines Pools passieren wird.
Daher, wenn Sie ARC verwenden und wissen, dass Sie außerhalb des Autorelease-Pools sein werden. Und daran kann man nichts ändern. Sie werden alle Komfortmethoden vermeiden wollen.
verwenden Sie dies.
[[NSString alloc] initWithFormat:@"%@",myObject];
anstelle diesen
[NSString stringWithFormat:@"%@",myObject];
dieser wird dem Bogen-System ermöglichen zu halten und loslassen, aber die zugrunde liegende Autofreigabe durch die bequeme Methode durchgeführt wird übersprungen, da Sie nicht die bequeme Methode verwendet werden.
Hoffe, dass hilft.
Original-Antwort
Ok, ich nicht diese Frage fühlen mit detailliert genug beantwortet.
die Nachricht präsentiert wurde
objc[1310]: Object 0x34f720 of class SimpleKeychain autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool() to debug
Der Debugger zeigt eine mögliche Bruchstelle aus, dass Sie die Situation debuggen helfen. Nun, während dieser Breakpoint wirklich wenig geholfen hat, die Situation zu debuggen. Ich denke, es ist wichtig zu wissen, wie man diesen Breakpoint dem Debugger hinzufügt und so habe ich die Zeit damit verbracht, daran zu basteln (nachdem ich das Internet durchforstet und nichts gefunden habe), bis ich diesen Fehler behoben habe.
Es ist irgendwie ärgerlich, dass die Unterbrechung bei allen Fehlern dies nicht erfasst, aber hier sind die Schritte zum Hinzufügen des Haltepunkts zum Debugger.
erste, was Sie tun möchten, ist der Haltepunkt Navigator
Debugger auswählen, indem
nächste auf dieser Registerkarte klicken schauen Sie in Richtung der Unterseite des Navigatorfenster und Drücken Sie die Plus-Taste
Damit können Sie manuell einen Haltepunkt hinzufügen.
Ich wählte einen C++ - Haltepunkt und gab den Namen der Nachricht in das Textfeld name ein.
nach dieser Ausnahme Zugabe es in der Tat Pause tat.
Allerdings kann dies für Sie als objektiver c Entwickler nützlich sein oder auch nicht. Dies brach in den Assembler-Code ein.
Leider zeigte es nur diesen Punkt auf den Call-Stack für den Thread.
Und es stellte sich heraus, dass der Autofreigabe Problem, weil eine Klasse namens Autofreigabe in einem dispatch_once Anruf war. und weitere Untersuchung ergab, dass die + (void) Last; Methode auf der Klasse wurde vor allem anderen aufgerufen.Dies geschieht über die Funktion call_load_methods und außerhalb des Threads der Hauptmethode.
dies zu korrigieren, habe ich nur den Autofreigabepool Wrapper um den Anruf.
eine andere Lösung in der + (void) Last sein kann, den Autofreigabepool hinzuzufügen; Methode. aber das war genug für meine Zwecke.
HINWEIS: Ich füge das hier zum Beitrag hinzu, weil ich nicht gerne ein Problem finde und nicht in der Lage bin, alle Wege zu der resultierenden Antwort herauszufinden. Wenn der Debugger Ihnen sagt, dass Sie einen Breakpoint zu der aufgelisteten Funktion hinzufügen sollen, sollte es irgendwo Informationen geben, um diese Informationen zu erhalten. Hoffentlich wird dies die Frustration einiger derer, die versuchen, diese Antwort zu finden, verringern.
Haben Sie einen Autorelease-Pool? und überprüfe die App auf Lecks mit einem der Hilfsprogramme, die du in xcode findest (profiliere es) – chikuba
Ich benutze keine Autorelease-Pools. Ehrlich gesagt, verstehe ich nicht, warum du einen benutzen würdest, also habe ich es nie getan. Aber ich werde das versuchen – Andrew
Es zeigt sich vor der App del. endet, aber ich habe Zeile für Zeile die ganze Sache auskommentiert, und ich lecke immer noch Objekte. Jeder Gedanke? – Andrew