Quelqu'un peut-il donner un exemple sur l'utilisation de NSCache pour mettre en cache une chaîne? Ou quelqu'un a un lien vers une bonne explication? Je n'arrive pas à en trouver ..
Réponses
Trop de publicités?Vous l'utilisez de la même manière que vous utiliseriez NSMutableDictionary
. La différence est que lors de l' NSCache
détecte trop de mémoire de la pression (c'est à dire qu'il cache trop grand nombre de valeurs), il va libérer une partie de ces valeurs pour faire de la place.
Si vous pouvez recréer ces valeurs au moment de l'exécution (par téléchargement à partir d'Internet, en faisant les calculs, peu importe) alors NSCache
peuvent répondre à vos besoins. Si les données ne peuvent être reproduites (par exemple c'est la saisie de l'utilisateur, il est sensible au temps, etc.) ensuite, vous ne devriez pas conserver dans un NSCache
, car il sera détruite.
Exemple, ne pas prendre de la sécurité des threads en compte:
// Your cache should have a lifetime beyond the method or handful of methods
// that use it. For example, you could make it a field of your application
// delegate, or of your view controller, or something like that. Up to you.
NSCache *myCache = ...;
NSAssert(myCache != nil, @"cache object is missing");
// Try to get the existing object out of the cache, if it's there.
Widget *myWidget = [myCache objectForKey: @"Important Widget"];
if (!myWidget) {
// It's not in the cache yet, or has been removed. We have to
// create it. Presumably, creation is an expensive operation,
// which is why we cache the results. If creation is cheap, we
// probably don't need to bother caching it. That's a design
// decision you'll have to make yourself.
myWidget = [[[Widget alloc] initExpensively] autorelease];
// Put it in the cache. It will stay there as long as the OS
// has room for it. It may be removed at any time, however,
// at which point we'll have to create it again on next use.
[myCache setObject: myWidget forKey: @"Important Widget"];
}
// myWidget should exist now either way. Use it here.
if (myWidget) {
[myWidget runOrWhatever];
}
Pour bien comprendre le concept de mise en cache et l'implémenter de la meilleure manière possible pour améliorer les performances à son efficacité maximale.
https://github.com/path/FastImageCache
Le développeur a expliqué les meilleurs moyens de gérer les caches et les moyens de l’améliorer.
Prendre plaisir!!!
exemple de Projet Ajouter CacheController.h et .m le fichier à partir de l'exemple de projet à votre projet.
[[CacheController storeInstance] setCache:@"object" forKey:@"objectforkey" ];
vous pouvez définir n'importe quel objet à l'aide de cette
[[CacheController storeInstance] getCacheForKey:@"objectforkey" ];
pour retrive
important: Le NSCache classe intègre divers auto-politiques de suppression. si vous souhaitez mettre en cache les données permanente ou si vous voulez supprimer les données mises en cache dans un temps donné de voir cette réponse.