Imágenes previas a la caching para la categoría UIImageView de AFNetworking

Cuando se carga mi aplicación, despliego una representación JSON de 99 objects.

Cada object tiene un campo 'image_url', que paso a setImageWithURLRequest de setImageWithURLRequest .

Mis imágenes se cargan en un tableView y, en consecuencia, solo las primeras celdas realizan requestes para sus imágenes. No es hasta que me desploop hacia abajo que las siguientes requestes de imágenes se hacen.

Una vez que elimino el set de datos inicial, me gustaría poder iniciar un process en segundo plano que se apaga y download los aproximadamente 95 objects que no están inicialmente visibles, y almacenarlos en caching de tal forma que cuando se llame setImageWithURLRequest , ya tendrá una image en caching para extraer.

Sin embargo, AFImageCache es privado, así que no estoy seguro si esto es posible. Sé que podría almacenar en caching con NSURLCache, pero tendría dos cachings separados y aislados, y tampoco es ideal.

¿Es mi única opción para no usar la categoría UIImageView de AFNetworking?

Estas respuestas me hacen pensar:

Las imágenes de caching de iOS con AFImageCache no parecen funcionar
Cómo configurar el caching cuando se utiliza AFNetworking's setImageWithURL

Por favor , no hagas esto.

Confía en mí cuando digo que esto casi innecesariamente.

De hecho, es probable que tenga el efecto opuesto al deseado, debido a la mayor presión de download imágenes que probablemente nunca se verán.

El caching es privado por una muy buena razón: es solo para acelerar las requestes posteriores en las vistas de desplazamiento. Simplemente haga que la vista de la tabla descargue las imágenes según lo solicitado, y debería estar bien. En todo caso, puede optimizar el tamaño de las imágenes que está descargando (asegúrese de tener las dimensiones correctas de la image, comprimir inteligentemente).

NO crearía un montón de UIImageView para lograr su propósito, eso sería un enfoque realmente ineficiente.

Puede agregar su propio método a UIImageView+AFNetworking.h para lograr esta habilidad. Disminuyo este sería el mejor enfoque. Un ejemplo no probado sería:

 + (void) cacheImageWithURL:(NSURL *)url { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; [request setHTTPShouldHandleCookies:NO]; [request setHTTPShouldUsePipelining:YES]; AFImageRequestOperation *requestOperation = [[[AFImageRequestOperation alloc] initWithRequest:request] autorelease]; [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { [[[self class] af_shanetworkingImageCache] cacheImage:responseObject forRequest:request]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) {}]; } 

Aquí hay una solución: cree algunos objects UIImageView (pero no los agregue como subvistas) y luego use la categoría UIImageView de AFNetworking para search las imágenes y rellenar su caching interna.

Código de muestra:

 NSArray *strings = [NSArray arrayWithObjects: @"http://i.imgur.com/IpQzE.png", @"http://i.imgur.com/sDnLs.jpg", nil]; for (NSString *string in strings) { UIImageView *imageView = [[[UIImageView alloc] init] autorelease]; [imageView setImageWithURL:[NSURL URLWithString:string]]; } 

Probablemente quiera considerar completamente cargado

Un simple caching mantenido automáticamente es download las imágenes y savelas en un nombre de file dependiente de la URL.

Cuando quiera cargar una image desde una url, intente leerla desde el disco duro primero: si no se devolvió ninguna, avance con su descargador de imágenes.

Sin embargo, recuerde borrar las cachings de su image.