J'ai récemment découvert que lorsque j'enregistrais, par exemple, 10 Mo de données dans les paramètres par défaut et que je relançais l'application, la mémoire de l'application est plus grande d'environ 10 Mo que le précédent.L'application va charger les données stockées dans les valeurs par défaut de l'utilisateur dans la mémoire au lancement de l'application?
Donc, je ne peux pas utiliser NSUserDefaults
pour enregistrer de grandes données pour une bonne performance?
Et les données sont des messages électroniques, ont une notion de dossier (boîte de réception, corbeille, etc.) et les pièces jointes des messages doivent être sauvegardés en local. Je sais SQLite
et je l'utilise pour stocker des données qui ont besoin de la recherche, mais c'est un peu complexe, je ne sais pas si CoreData
est un bon choix.
J'ai prévu de stocker des emails à NSUserDefaults
parce que c'est très simple car je viens de mettre en œuvre le protocole NSCoding
, mais maintenant il ne semble pas une bonne solution pour le problème de mémoire.
// Save
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mailFolders];
[userDefaults setObject:data forKey:@"myKey"];
[userDefaults synchronize];
// Read
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *mailData = [userDefaults objectForKey:@"myKey"];
NSArray *mailDataArray = [NSKeyedUnarchiver unarchiveObjectWithData:mailData];
NSLog(@"mail data size:%@", [NSByteCountFormatter stringFromByteCount:mailData.length countStyle:NSByteCountFormatterCountStyleFile]);
/**
mailFolder {
folderInfo,
messages
}
*/
Je vous suggère de sauvegarder les données dans votre propre format dans le répertoire de documents. – rckoenes
Le paramètre 'NSUserDefaults' est destiné aux petits paramètres et non aux magasins de données. Ceci parce que tout est chargé en mémoire lorsque l'application démarre, – rckoenes
Je sauvegarde les données en tant que fichier en local, et il ne charge pas en mémoire maintenant. – tomfriwel