Code wie folgt veröffentlichen:NSKeyedArchiver archivedDataWithRootObject: nicht Speicher useage
NSMutableData *data = [NSMutableData dataWithLength:10*1024*1024];
for (int i = 0; i < 10; i++) {
NSData* archiveData = [NSKeyedArchiver archivedDataWithRootObject:data];
NSLog(@"%lu", (unsigned long)[archiveData length]);
}
Set Bruchstelle an in der for-Schleife, wird es der Speicher useage sehen erhöhen: 10MB -> 20MB ....-> 100 MB, wenn es aus der for-Schleife heraus ist, gibt es immer noch keinen Speicher frei.
Nur wenn ich den Prozess fortsetze (kann in die nächste Hauptschleife gehen), verringert sich die Speicherbelegung um 100MB.
PS: Schalten Sie die ARC/deaktivieren Sie die ARC und verwenden Sie Keyword-Release ist das gleiche Ergebnis.
Ich versuche '' '@ autoreleasepool''' hinzufügen, es immer noch nicht Speicher sofort freizugeben, mein Problem ist der Speicherverbrauch in der for-Schleife ist zu groß, ich versuche den Code in für Schleife zu' '' dispatch_async '' ', es funktioniert, aber ich mag diese Lösung nicht. – waitianlou
Es hängt davon ab, was Sie in Ihrer Schleife tun. Das Beispiel, das Sie angegeben haben, sollte sofort den Speicher freigeben, den 'archicedDataWithRootObject' angefordert hat, sodass ich Ihnen nicht mehr sagen kann, ohne mehr über Ihren Code zu wissen. –
Sie sind richtig, das Problem ist Speicher in UIPastebord nicht freigeben. Ich poste eine andere Frage, danke. – waitianlou