Comment utiliser NSCache
Quelqu'un peut-il donner un exemple sur la façon d'utiliser NSCache
à cache une chaîne de caractères?
Ou quelqu'un a un lien pour une bonne explication? Je n'arrive pas à trouver tout..
- Malgré une énorme quantité de Cacao, je n'ai jamais entendu parler de NSCache. Bonne question!
- J'ai créé un objet iterable version de NSCache, ici. N'hésitez pas à apporter à ça: github.com/gregkrsak/GKCache
Vous devez vous connecter pour publier un commentaire.
Vous l'utiliser de la même manière que vous le feriez utiliser
NSMutableDictionary
. La différence est que lorsqueNSCache
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) puis
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 unNSCache
, car il sera détruite.Exemple, ne prenant pas la sécurité des threads en compte:
applicationDidEnterBackground
)NSCache
objet n'est pas libéré, alors oui, il reste en mémoire. Son contenu peut encore être soumis à l'abattage cependant.NSAssert(myCache == nil, @"cache object is missing");
et pas!= nil
?NSCache
de l'expulsion valeurs sont un détail d'implémentation. Si vous trouvez que vous obtenez beaucoup de mémoire mises en garde, vous pouvez vider le cache manuellement, à ce point (-removeAllObjects
.)Exemple de code pour la mise en cache d'une chaîne à l'aide de NSCache dans Swift:
Pour créer une seule application à l'échelle de l'instance de NSCache (un singleton), vous pouvez facilement étendre NSCache pour ajouter un sharedInstance de la propriété. Viens de mettre le code suivant dans un fichier appelé quelque chose comme NSCache+Singleton.swift:
Vous pouvez ensuite utiliser le cache n'importe où dans l'application:
class Cache: NSCache<AnyObject, AnyObject> { static let shared = NSCache<AnyObject, AnyObject>() private override init() { super.init() } }
exemple de Projet
Ajouter CacheController.h et .m le fichier à partir de l'exemple de projet à votre projet. Dans la catégorie où vous souhaitez mettre en cache des données , de mettre le code ci-dessous.
vous pouvez définir n'importe quel objet à l'aide de cette
à 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 déterminé voir cette réponse.
Ne pas les objets mis en cache de mettre en œuvre la NSDiscardableContent protocole?
De la NSCache classe de référence:
Une commune, le type de données stockées dans NSCache objets est un objet qui implémente l'NSDiscardableContent protocole. Le stockage de ce type d'objet dans un cache a des avantages, car son contenu peut être éliminé quand il n'est plus nécessaire, et ainsi de gagner de la mémoire. Par défaut, NSDiscardableContent d'objets dans le cache sont automatiquement supprimés de la mémoire cache si leur contenu est ignoré, bien que cette suppression automatique de la politique peut être modifiée. Si un NSDiscardableContent objet est mis en cache, le cache des appels discardContentIfPossible sur elle lors de son retrait.