Ich arbeite an einem Projekt, bei dem ich vor kurzem dasselbe tun musste, was Sie beschreiben. Ich erhalte base64-kodierte PDF-Dateien als Strings von einem .NET-Webdienst, die in ihr Original dekodiert und als PDF-Dateien im Dokumentenverzeichnis der Anwendung gespeichert werden müssen.
Meine Lösung war:
- Utilice ASIHTTPRequest um mit dem Webdienst zu kommunizieren.
- Ich verwende dann TBXML um eingehendes Xml zu analysieren und die base64 als NSString zu erhalten.
- Zum Dekodieren der Zeichenfolge verwende ich eine Methode aus der QSUtilities-Bibliothek namens decodeBase64WithString.
- Schließlich speichere ich das Ergebnis mit NSData's writeToFile.
Ich habe diese Methode bei PDF-Dateien mit einer Größe von bis zu 25 MB getestet und erfolgreich angewendet. Ich hatte auch ein paar Testläufe mit einer 48mb-Datei, aber diese Datei machte die decodeBase64WithString-Methode nehmen zu viel Speicher und meine App abgestürzt. Ich habe noch keine Lösung für dieses Problem gefunden.
Wenn Sie mit mehreren großen Dateien arbeiten, sollten Sie hin und wieder Ihren Speicher freigeben. Ich habe alle meine Dateien in einer Schleife, in der ich meinen eigenen nsautorelease-Pool verwenden und ihn am Ende der Schleife leeren musste, um alle automatisch freigegebenen Objekte freizugeben.