Quali sono alcune delle politiche di rimozione automatica di NSCache? La documentazione di Apple non li menziona e ho scoperto sperimentalmente che NSCache non risponde agli avvisi di memoria.NSCache policy di rimozione automatica
risposta
Stai meglio trattare NSCache
come una scatola nera, per quanto è possibile.
Da Caching and Purgeable Memory (sottolineatura mia):
Quando si aggiungono elementi da una cache, è possibile specificare un valore di costo per essere associate a ciascuna coppia chiave-valore. Chiamare il metodo
setTotalCostLimit:
per impostare il valore massimo per la somma di tutti i costi degli oggetti memorizzati nella cache. Pertanto, quando viene aggiunto un oggetto che spinge lototalCost
sopra lototalCostLimit
, la cache potrebbe sfrattare automaticamente alcuni dei suoi oggetti per tornare al di sotto della soglia. Questo processo sgombero non è garantita, in modo da cercare di manipolare i valoricost
per ottenere un comportamento specifico potrebbe pregiudicare le prestazioni della cache. Pass0
per ilcost
se non hai niente di utile, o utilizza il metodosetObject:forKey:
, che non richiede un costo per essere passato in. Nota: il limite di conteggio e il limite totale di costo non sono rigorosamente applicato. Cioè, quando la cache supera uno dei suoi limiti, alcuni dei suoi oggetti potrebbero essere sfrattati immediatamente, in seguito o mai, tutto a seconda dei dettagli di implementazione della cache.
NSCache
non risponde a UIApplicationDidReceiveMemoryWarningNotification
, ma fa sfrattare automaticamente gli oggetti in situazioni di memoria insufficiente, ovviamente utilizzando qualche altro meccanismo.
Mentre io suggerito in precedenza osservando UIApplicationDidReceiveMemoryWarningNotification
, questo non è il caso. Non è necessaria alcuna gestione speciale per situazioni di memoria insufficiente, poiché lo NSCache
gestisce automaticamente questo problema.
Aggiornamento:
Come di iOS 7, l'NSCache
non solo non risponde alle avvisi di memoria, ma anche non sembra in sé eliminare correttamente su pressione di memoria, o (si veda NSCache crashing when memory limit is reached (only on iOS 7)).
ho sottoclasse NSCache
osservare UIApplicationDidReceiveMemoryWarningNotification
, ed eliminare la cache su avviso di 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. Rimozione automatica di UIAlertController
- 2. Miglior utilizzo di NSCache su un'app
- 3. PowerShell: Execution Policy
- 4. Google search policy
- 5. Come utilizzare NSCache con un'implementazione generica NSDiscardableContent
- 6. Restache Cache policy 20.x
- 7. Policy Server con gevent-websocket
- 8. Amazon S3 Policy Signing in Java
- 9. ETags, IIS7, Kernel Cache Policy (enableKernelCache)
- 10. HTML5 Canvas getImageData e Same Same Policy
- 11. Fusione vincolante Post-policy ignoring bindingRedirect
- 12. Modernizr causa errori di violazione di Content Security Policy (CSP)
- 13. Redis maxmemory-policy: prestazioni di volatile-lru vs allkeys-lru
- 14. rimozione doctype durante il salvataggio di domdocument
- 15. Disabilitazione automatica di RichTextBox
- 16. Registrazione automatica di fabbrica
- 17. Codice di formattazione automatica
- 18. Rimozione di duplicazione -
- 19. Rimozione gestori di eventi
- 20. Rimozione di app TestFlight?
- 21. Arresto anomalo di NSCache quando viene raggiunto il limite di memoria (solo su iOS 7)
- 22. Configura il server IIS per utilizzare l'intestazione "Content-Security-Policy"
- 23. Checkin Policy non funziona dopo l'aggiornamento a VS 2015
- 24. come il postino invia richieste? ajax, same origin policy
- 25. Rimozione di frammenti di FragmentStatePagerAdapter
- 26. Un team di selezione automatica
- 27. Rapida scalabilità automatica di AWS
- 28. Distribuzione automatica all'emulatore di Azure?
- 29. Dispositivi di riconnessione automatica Bluez
- 30. È l'eliminazione automatica di rpart?
E 'una buona idea per osservare l'avviso di memoria e eliminare la cache, allora? –
@EvilNodoer Facendo qualche sperimentazione, ho scoperto che, mentre non risponde a 'UIApplicationDidReceiveMemoryWarningNotification', in realtà fa espellere automaticamente i suoi oggetti in situazioni di memoria insufficiente (deve essere utilizzando qualche altro meccanismo). – Rob
@EvilNodoer BTW, devo ritirare il mio commento su 'NSCache' rispondere alle richieste di memoria, in quanto questo è cambiato in iOS 7. Osservando' UIApplicationDidReceiveMemoryWarningNotification' sarebbe prudente. Vedi http://stackoverflow.com/questions/19546054/nscache-crashing-when-memory-limit-is-reached-only-on-ios-7 – Rob