Ich würde gerne wissen, wie oft ein Objekt automatisch freigegeben wurde. Ich habe das Ziel c lange genug benutzt, dass es im Allgemeinen einfach ist, zu wissen, ob ein Objekt eine Autorelease erhalten hat oder nicht, aber ich sehe ständig Fragen, die sich mit Speicher befassen und Zählungen behalten. Irgendwann endet eine Antwort immer, "Sie können dem retainCount eines Objekts nicht vertrauen" - dem stimme ich zu, ABER wenn Sie bestimmen könnten, wie oft ein Objekt automatisch freigegeben wurde, dann könnten Sie tatsächlich vertrauen the retainCount, wenn Sie eine Kategorie wie folgt hinzugefügt haben:
%Vor%
Es würde immer noch eine Ausnahme für unveränderliche Typen geben, da diese normalerweise die Anzahl der Retains während einer Kopie erhöhen. Daher können Sie immer noch nicht auf retainCount vertrauen.
Was ich NICHT vorschlage
Ich suche diese Antwort nicht, um retainCount im Produktionscode zu verwenden. Ich kann dies jedoch als wertvoll für jemanden betrachten, der Probleme mit dem Arbeitsspeicher beseitigt.
Ich kann mir vorstellen, dass einige Leute diese Frage hassen werden, da Programmierer sich nicht darum kümmern sollten, wie oft ein Objekt automatisch freigegeben wurde. Bei der Codierung sollte es darum gehen, Allokierungen auszugleichen, zu behalten, zu kopieren, neu zu veröffentlichen, Ende der Geschichte. Der Sinn dahinter ist jedoch, Leuten zu helfen, die auf ihren Kopf schlagen. [NSObject retainCount]
brennt eine Menge Leute, und eine Antwort auf diese Frage wäre ziemlich cool.
Ich bin mir sicher, dass es einen Weg gibt zu bestimmen, wie oft ein Objekt automatisch freigegeben wurde. Ich weiß einfach nicht was es ist, daher die Frage.
Siehe ähnliche Frage: Objekte in NSAutoreleasePool in objective-c .
Bearbeiten
Danke euch allen für eure Antworten. Vielleicht finden Sie das interessant = & gt; Ariel wies darauf hin, dass GNUStep Implementierung von Cocoa und speziell es ist NSAutoreleasePool hat diese Methode: + (NSUInteger) autoreleaseCountForObject: (id) anObject . Diese Methode ist langsam und gibt nur die Autorelease-Anzahl von NSAutoReleasePools im Anruferthread zurück. Trotzdem ... Es ist interessant, dass es da ist. Die Dokumentation zitiert, dass es wirklich nur zum Debuggen nützlich ist. Das war wirklich, was ich im Cocoa-Framework irgendwie finden (oder für möglich halten) wollte.
Ich stimme den Antworten zu, dass selbst wenn es möglich wäre, die Autorelease-Zählung zu erhalten, dass bessere Werkzeuge existieren (Zombies, Lecks, statischer Analysator).