2009-06-28 8 views
2

Ich überprüfe auf Lecks in Instrumenten, und ich habe mich darauf eingestellt, jede Sekunde zu prüfen, aber es gibt keine Lecks.Keine Lecks in den Instrumenten, obwohl ich sicher bin, dass sie existieren.

Ich bin mir sicher, dass es in meiner App einige geben muss, gibt es irgendetwas, was diese anzeigen könnte? Gibt es eine gute Möglichkeit, ein Leck zu erstellen, so dass ich testen kann, ob Lecks in Instrumenten auftauchen?

Danke!

+0

"... ich bin mir sicher, dass es in meiner App einige geben muss ..." - welchen Beweis müssen Sie diese Behauptung unterstützen? Glauben Sie Ihren Messgeräten nicht oder fehlt Ihnen das Vertrauen in Ihre Messfähigkeiten? – duffymo

+1

Hey! Für den Fall, dass Sie mit dem Tool "Instrumente" noch nicht vertraut sind, hier ein Tipp, um das Beste daraus zu machen: Klicken Sie in der unteren Leiste auf das Symbol, das drei leicht eingerückte Elemente anzeigt. Es bietet eine schöne Liste von Lecks. Klicken Sie dann auf das letzte Symbol in diesem Satz (ein halb ausgefülltes Rechteck), um das "Erweiterte Detail" anzuzeigen. Sie können ein einzelnes Leck auswählen und erhalten eine vollständige Stack-Trace und Sie können in den Code springen. Ziemlich glatt! Entschuldigung, wenn du es bereits wusstest, aber ich war so beeindruckt, als ich das endlich gefunden habe ... –

+1

"... oder fehlt es dir an Vertrauen in deine Messfähigkeiten?" Das erste Mal, als ich das Lecks-Tool benutzte, bezweifelte ich sowohl mein Verständnis von Programmierung in Objective-C als auch meine Messfähigkeiten. :-) – Nosredna

Antwort

1

Sie werden mit einem Werkzeug nur dann Undichtigkeiten finden, wenn ein Objekt zugewiesen, aber nicht mehr referenziert wird. Eine andere Art von "Leck" besteht darin, einen Verweis auf etwas zu halten, das Sie nicht beabsichtigt haben. Dies passiert typischerweise mit einer Sammlung wie einer Hash-Tabelle oder einem Wörterbuch, wo Schlüssel/Wert-Paare in der Sammlung verbleiben, die der Programmierer vergessen hat.

3

ein Leck erstellen ist recht einfach:

id someObject = [[NSObject alloc] init]; 
someObject = nil; 

Tropfen einige Code wie das in Ihrer Anwendung, und Sie sollten auf jeden Fall ein Leck zeigen in Instruments sehen.

+1

Das Problem ist, dass wenn Sie das "someObject = nil;" Teil, den Sie wahrscheinlich nicht tun, wenn Sie nicht absichtlich versuchen, Lecks zu erzeugen, dann finden Instrumente sie oft nicht. –

1

Ich bin ziemlich sicher, wie Clemahieu postulierte, was Sie wirklich sehen, sind überbehalte Objekte - Sie denken, Sie haben sie befreit, aber sie werden immer noch beibehalten.

Eine schnelle Vernunftsprüfung dafür ist, Haltepunkte in dealloc zu setzen und zu sehen, ob die Klassen, die man erwarten würde, wirklich sind.

Sie können auch das Memory-Tracking-Instrument (keine Lecks) verwenden, um zu sehen, welche Speicher noch vorhanden ist - wählen Sie einfach die "erstellt und immer noch leben" -Option, um zu überprüfen, welche Objekte noch vorhanden sind.