NSData + dataWithContentsOfURL tiene algún tipo de almacenamiento en caché por defecto? ¿Alguien ha experimentado algún tipo de problema con este método? ¿Cuál es la forma más eficiente de obtener datos de la web?NSData dataWithContentsOfURL caché
Respuesta
La documentación no indica que se almacenará en caché, por lo que creo que debemos suponer que no hacen ningún almacenamiento en caché.
¿Qué tipo de datos que desea obtener
UIImage: sí, creo que se debe utilizar NSData
vídeo: se debe utilizar MPMoviePlayerController para la transmisión de
Texto: Creo que se puede hacer la normalidad NSUrlConnection. También tiene asíncrono, sincrónico y en caché
Use ASIHTTPRequest. Es una biblioteca de cliente HTTP de terceros que hace que la interacción de red sea MUCHO más simple y tiene funciones de almacenamiento en caché muy agradables.
ACTUALIZACIÓN: Acabo de recibir un voto a favor en esta respuesta, que es un buen recordatorio para volver y actualizar. Lot ha cambiado desde agosto de 2010. En particular: ASIHTTPRequest ahora está en desuso, y su autor está alentando a las personas a usar algo más. AFNetworking parece una opción popular.
Reemplazó mi voto con un voto activo. No era nada personal, obviamente, simplemente no quería que la gente pensara que todavía era una buena respuesta. Buen trabajo en la actualización. :) –
@StevenFisher - La cantidad de lugares en mi historial SO en los que sinceramente recomiendo ASIHTTPRequest es asombroso. ¡Estoy contando con votos a favor para ayudarme a encontrarlos todos! –
Es posible que desee considerar eliminar la respuesta, al menos en este contexto ... No creo que tenga que volver a revisar todo. –
Lo mejor es usar NSURLConnection. La solicitud NSURLRequest que le des puede configurarse para hacer el almacenamiento en caché de la forma que desees, pero de forma predeterminada solo hará el almacenamiento en caché estándar de los recursos HTTP que tienen los encabezados apropiados en su respuesta.
Esto es lo que hago:
NSData *data = [NSURLConnection sendSynchronousRequest:
[NSURLRequest requestWithURL:url]
returningResponse:nil
error:&error];
Asegúrese de poner esto en un NSOperationQueue que no es su cola principal fuera de cargarlo desde el hilo principal de alguna otra manera, sin embargo. Alternativamente, use una solicitud asincrónica.
Esto funcionó para mí. – razorhead
si lo que necesita es solo descargar una imagen de una url, no se moleste en usar ninguna biblioteca, solo una simple llamada dispatch_async debería estar bien. de esta manera:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
{
NSData * data = [NSData dataWithContentsOfURL:imageUrl];
dispatch_async(dispatch_get_main_queue(), ^(void){
self.image = [UIImage imageWithData:data];
});
});
El problema es que la imagen no está en la memoria caché, por lo que este método es pesado en la red si la misma imagen se reutiliza en muchos lugares. –
Parece que en iPhone5s la política por defecto es de caché (unlinke iPhone5 y anteriores).
Puede manejar a través del parámetro de opciones la política de caché para NSData. Por ejemplo, si se quiere evitar la caché, el siguiente cortó puede utilizar:
[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil];
- 1. ¿-dataWithContentsOfURL: de NSData funciona en un hilo de fondo?
- 2. ¿Por qué NSData dataWithContentsOfURL a veces devuelve valor NULL?
- 3. Fecha de acceso del archivo no modificada después de leer el archivo por [NSData dataWithContentsOfURL: ...]
- 4. ¿DataWithContentsOfURL está dañado al iniciar la aplicación?
- 5. Cómo configurar el tiempo de espera para dataWithContentsOfURL: url
- 6. NSData & NSURL - url con espacio con problema
- 7. NSData isEqualtoData
- 8. memoria problema de fugas utilizando NSData en iPhone
- 9. iPhone - NSData de la URL del archivo local
- 10. impresión NSData usando NSLog
- 11. NSData a int
- 12. Convertir NSData a JSON
- 13. Byte Array a NSData
- 14. NSData to UIImage
- 15. NSURLConnection contra NSData + GCD
- 16. CGPDFDocumentRef desde NSData
- 17. Convirtiendo NSData en NSDictionary
- 18. NSManagedObjectID en NSData
- 19. iPhone - int a NSData?
- 20. NSData writeToFile no funciona
- 21. QLPreviewController con NSData?
- 22. Convierta nsdictionary a nsdata
- 23. NSObject en NSData
- 24. Poner PDF en NSData
- 25. ¿Dónde escribe [NSData writeToFile]?
- 26. Cómo reproducir video desde NSData
- 27. Cómo concatenar 3 variables NSData
- 28. ¿Escribir NSData en un archivo?
- 29. Cómo convertir CFDataRef en NSData?
- 30. Conversión de NSData a base64
que necesito para obtener los archivos de configuración en formato XML, que debo usar NSURLConnection, ¿verdad? – cesarnicola
Sí, creo que debería usar NSUrlConnection y hacer asyncrhonous para evitar el bloqueo de UI – vodkhang