2016-06-10 12 views
3

Kann der Inhalt eines Objekts manuell aus dem Speicher gelöscht werden?Wie kann ich Speicher manuell löschen?

Insbesondere habe ich es mit NSData. Ich habe versucht mit data.length = 0 und data.setData(NSData).

Ich weiß, ARC wird kommen und aufräumen, nachdem es außerhalb des Umfangs, zu dem es gehört, aber ist es möglich, diesen Prozess manuell erzwingen, wenn ich will?

Antwort

3

Ich denke, Sie haben einige Missverständnisse über ARC Ich möchte aufräumen. Das Ziel von ARC ist es, sicherzustellen, dass Speicherlecks nicht auftreten. Es ist dafür verantwortlich, das Objekt über seinen Lebenszyklus hinweg zu verfolgen und sicherzustellen, dass es "freigegeben" wird, wenn keine Referenzen mehr vorhanden sind.

Es ist wichtig zu beachten, dass der Speicher "befreit" bedeutet nicht "überschreiben alles mit 0s".

Es bedeutet einfach, dass Speicher als unbenutzt bezeichnet wird. Der freigegebene Speicher wird ein Kandidat für die Zuweisung, wenn das System neuen Objekten Speicher zuweisen muss.

Es gibt jedoch keine Garantie dafür, dass diese Neuzuweisung erfolgt. Daher ist es sehr gut möglich, dass Ihr freier Speicher Ihre ursprünglichen Daten enthält und niemals überschrieben wird.

+0

Also selbst nach dem Aufnehmen eines Objekts und dem Überschreiben des Inhalts von selbst '.setdata (nsdata())' garantiert es nicht, dass der tatsächliche Speicher mit dem neuen Wert überschrieben wird? Oder beziehst du dich, wenn du das Objekt ganz durchlässt? –

+0

Ich weiß nicht, über welche 'setdata'-Methode du redest, aber höchstwahrscheinlich wird eine interne Instanzvariable des Empfängers aktualisiert, die einen Verweis auf NSData enthält. Wenn Sie einen neuen Wert festlegen, wird ARC das alte NSData-Objekt freigeben, auf das verwiesen wurde (wenn nichts anderes auf dieses NSData-Objekt verweist), aber es gibt keine Garantie, dass es auf Null gesetzt wird. – Alexander

+0

Die NSMutableData SetData() - https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/#//apple_ref/occ/instm/NSMutableData/setData: –