NSData + dataWithContentsOfURL hat standardmäßig eine Zwischenspeicherung? Hat jemand eine Art von Problemen mit dieser Methode experimentiert, was ist der effizienteste Weg, Daten aus dem Internet zu bekommen?
Die Dokumentation sagt nicht, dass es zwischengespeichert wird, also sollten wir davon ausgehen, dass sie kein Caching durchführen.
Welche Arten von Daten möchten Sie erhalten?
UIImage: Ja, ich denke du solltest NSData verwenden
Video: Sie sollten MPMoviePlayerController für das Streaming verwenden
Text: Ich denke, dass Sie normale NSUrlConnection tun können . Es hat auch asynchron, synchron und Caching
Verwenden Sie ASIHTTPRequest. Es ist eine HTTP-Client-Bibliothek eines Drittanbieters, die die Netzwerkinteraktion VIEL einfacher macht und sehr nette Cache-Funktionen hat.
UPDATE: Habe gerade einen Kommentar zu dieser Antwort bekommen, was eine gute Erinnerung ist, um zurück zu kommen und zu aktualisieren. Lot hat sich seit August '10 geändert. Vor allem: ASIHTTPRequest ist jetzt veraltet, und der Autor ermutigt die Leute, etwas anderes zu verwenden. AFNetworking scheint eine beliebte Wahl zu sein.
Am besten verwenden Sie NSURLConnection. Die NSURLRequest, die Sie angeben, kann so konfiguriert werden, dass das Caching wie gewünscht ausgeführt wird. Standardmäßig wird jedoch nur das Standard-Caching von HTTP-Ressourcen durchgeführt, die in ihrer Antwort die entsprechenden Header enthalten.
Das mache ich:
%Vor%Stellen Sie sicher, dass Sie dies in eine NSOperationQueue legen, die nicht Ihre Hauptwarteschlange ist, oder laden Sie sie auf andere Weise aus dem Hauptthread. Verwenden Sie alternativ eine asynchrone Anforderung.
Es scheint so zu sein, dass die Standardrichtlinie bei iPhone5s das Zwischenspeichern (Entfernen von iPhone5 und früher) ist.
Sie können über den Parameter options die Cache-Policy für NSData bearbeiten. Wenn Sie beispielsweise den Cache vermeiden möchten, kann der folgende Ausschnitt verwendet werden:
%Vor%Wenn Sie nur Bild von einer URL herunterladen möchten, verwenden Sie keine Bibliotheken, nur ein einfacher dispatch_async-Aufruf sollte in Ordnung sein. so:
%Vor%