Sie sagen:
Die Freigabe Linie nicht wirklich Release alle Objekte im Wörterbuch. Ich kann immer noch alle auf der nächste Zeile sehen. Erst wenn die Zeile ausgeführt wird, wird das Wörterbuch auf Null gesetzt. Gibt es einen besseren Weg , es zu tun?
Wenn -release
des wandelbaren Wörterbuch bewirkt, dass das Wörterbuch ausgeplant werden - fällt die Zählung auf Null halten - dann wird das veränderbare Wörterbuch wird lösen alle Objekte enthalten. Immer.
Wenn also die Objekte nicht freigegeben werden, dann ist dieses „fix“, schlug ...
[myDictionary removeAllObjects];
[myDictionary release];
myDictionary = [[NSMutableDictionary alloc] init];
... ist ein Speicher, in Leck, dass die ursprüngliche Instanz von NSMutableDictionary durchgesickert wird.
Als Ergebnis -removeAllObjects
wird leer das Wörterbuch und lassen Sie alle darin enthaltenen Objekte aufrufen, aber Sie haben noch ein Speicherleck, das Sie herausfinden und beheben sollte.
zu stumpf sein:
Wenn die Objekte in Ihrem Wörterbuch nicht freigegeben werden, wenn das Wörterbuch die oben -release
empfängt (ohne -removeAllObjects
Aufruf), dann gibt es einen Speicherverlust. Es ist entweder:
Die Objekte im Wörterbuch haben eine zusätzliche Zeit beibehalten.
Es gibt immer noch eine hervorragende -retain
auf dem Wörterbuch.
Da Sie die Objekte sagen korrekt zu sein (wie in, wie erwartet) ausgeplant, wenn Sie -removeAllObjects
nennen, dann muss es sein (2). Schauen Sie sich Ihren Code an und finden Sie heraus, wo es ein extra -retain
des Wörterbuchs gibt. Sie können das Objekt Objekt Alloc verwenden, um genau herauszufinden, woher alle Rücklagen stammen.
Sie haben Recht. Aus irgendeinem Grund tauchte es nicht im Code-Hinweis auf, als ich es anfänglich versuchte ... also nahm ich an, dass es nicht verfügbar war. Ich sehe es jetzt. Vielen Dank. – 4thSpace
Dies beantwortet die Frage nicht. Mit 'Freigabe' im Wörterbuch werden alle enthaltenen Objekte freigegeben. 4thSpace hat ein anderes Problem. – bbum
Ich möchte nur wiederholen, dass, wenn Sie ein NSDictionary freigeben und die Objekte nicht freigegeben werden, das bedeutet, dass diese Objekte einen retainCount von mehr als eins haben, was bedeutet, dass sie überbrückt werden oder anderswo nicht ordnungsgemäß freigegeben werden. Wenn Sie die Objekte zum Wörterbuch hinzufügen, geben Sie sie richtig frei? – lucius