¿Cuáles son algunas de las políticas de eliminación automática de NSCache? La documentación de Apple no los menciona, y experimentalmente descubrí que NSCache no responde a la advertencia de memoria.Política de eliminación automática de NSCache
Respuesta
Lo mejor es tratar NSCache
como una caja negra, tanto como pueda.
De Caching and Purgeable Memory (el énfasis es mío):
Al añadir elementos a un caché, puede especificar un valor de coste de estar asociado con cada par clave-valor. Llame al método
setTotalCostLimit:
para establecer el valor máximo de la suma de todos los costos de los objetos en caché. Por lo tanto, cuando se agrega un objeto que empuja eltotalCost
sobre eltotalCostLimit
, el caché puede desalojar automáticamente algunos de sus objetos para volver a estar por debajo del umbral. Este proceso de desalojo no está garantizado, por lo que tratar de manipular los valorescost
para lograr un comportamiento específico podría ser perjudicial para el rendimiento de la memoria caché. pase en0
para lacost
si no tienen nada útil, o utiliza el métodosetObject:forKey:
, que no requiere un coste para ser aprobada en. Nota: El límite de recuento y el límite de costo total que no están estrictamente aplicadas. Es decir, cuando la memoria caché supera uno de sus límites, algunos de sus objetos pueden ser desalojados inmediatamente, más tarde o nunca, todo dependiendo de los detalles de implementación de la memoria caché.
NSCache
no responde a UIApplicationDidReceiveMemoryWarningNotification
, pero lo hace de forma automática desalojar a sus objetos en situaciones de poca memoria, obviamente, utilizando algún otro mecanismo.
Si bien anteriormente sugerí observar UIApplicationDidReceiveMemoryWarningNotification
, este no es el caso. No es necesario un manejo especial para situaciones de poca memoria, ya que NSCache
maneja esto automáticamente.
Actualización:
A partir de iOS 7, el NSCache
no sólo no responde a las advertencias de memoria, pero también no parece que purgar de forma correcta en la memoria de la presión, ya sea (ver NSCache crashing when memory limit is reached (only on iOS 7)).
I subclase NSCache
observar UIApplicationDidReceiveMemoryWarningNotification
, y purgar la caché tras la advertencia de memoria:
@interface AutoPurgeCache : NSCache
@end
@implementation AutoPurgeCache
- (id)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(removeAllObjects) name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
}
return self;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil];
// if not ARC, also
//
// [super dealloc];
}
@end
- 1. función de puntero - eliminación de referencias automática
- 2. Eliminación automática de viejas grabaciones de IntelliTrace
- 3. propiedad del nombre NSCache
- 4. ¿Qué es NSCache?
- 5. Cómo usar NSCache
- 6. Guardar NSCache contenido en disco
- 7. Misma política de origen
- 8. ¿Cómo almacenar datos en NSCache en iOS?
- 9. archivo de política de jar
- 10. política ThreadPoolExecutor
- 11. Cómo utilizar NSCache con una implementación genérica de NSDiscardableContent
- 12. Objetivo-c: ¿beneficios de usar NSCache sobre un NSMutableDictionary estático?
- 13. Eliminación automática de variables locales no utilizadas del código fuente C
- 14. modos Emacs para flexión y bisonte, o eliminación de sangría automática para estos modos?
- 15. Eliminación automática de archivos pyc cuando se mueve la py correspondiente (Mercurial)
- 16. Política de manejo de excepciones en bibliotecas
- 17. Política de control de código fuente
- 18. política para sondear rss
- 19. Eliminación/eliminación de grupo en Xcode
- 20. Política de Amazon S3 Firma en Java
- 21. Leyendo la política de contraseña local programáticamente
- 22. ¿Por qué mi política AWS S3 Bucket no reemplaza mi política de IAM?
- 23. Política con std :: captura bad_alloc
- 24. Política para firmar y cifrar
- 25. instalación automática de apk
- 26. Recursos de implementación automática
- 27. Traducción automática de texto
- 28. Prueba automática de Qt
- 29. estrategia de eliminación REST
- 30. OneToOneField y eliminación de
¿Es una buena idea para observar sobre alerta memoria y purgar la caché, entonces? –
@EvilNodoer Haciendo algo de experimentación, descubrí que si bien no responde a 'UIApplicationDidReceiveMemoryWarningNotification', en realidad desaloja sus objetos automáticamente en situaciones de poca memoria (debe usar algún otro mecanismo). – Rob
@EvilNodoer Por cierto, debo retractar mi comentario sobre 'NSCache' respondiendo a la presión de la memoria, ya que esto ha cambiado en iOS 7. Observar' UIApplicationDidReceiveMemoryWarningNotification' sería prudente. Ver http://stackoverflow.com/questions/19546054/nscache-crashing-when-memory-limit-is-reached-only-on-ios-7 – Rob