122 votes

Comment utiliser NSCache

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 ..

135voto

Jonathan Grynspan Points 32291

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];
}

19voto

Gabriel.Massana Points 2096
@implementation ViewController
{    
    NSCache *imagesCache;    
}


- (void)viewDidLoad
{    
    imagesCache = [[NSCache alloc] init];
}


// How to save and retrieve NSData into NSCache
NSData *imageData = [imagesCache objectForKey:@"KEY"];
[imagesCache setObject:imageData forKey:@"KEY"];

6voto

Cian Points 32

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!!!

6voto

Aju Points 116

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X