2017-05-08 1 views
0

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 
} 
*/ 
+0

Je vous suggère de sauvegarder les données dans votre propre format dans le répertoire de documents. – rckoenes

+0

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

+0

Je sauvegarde les données en tant que fichier en local, et il ne charge pas en mémoire maintenant. – tomfriwel

Répondre

0

NSUserDefaults est vraiment destiné à stocker de petits morceaux de données telles que les paramètres, les préférences et les valeurs individuelles.

Suggestion d'utiliser des données de base ou SQLite pour stocker une grande liste d'éléments.

Il y avait une très bonne question à propos de sqlite vs Core Data; Sur Working with data in iOS Apps et Core Data vs SQLite 3 sur Stack Overflow, vous souhaiterez peut-être lire les réponses à cette question.

0

i thnik il n'y a pas de limite de taille pour le stockage dans tout ce NSUserDefaults.It lors du stockage de l'appareil .. vous pouvez vérifier ce lien https://discussions.apple.com/thread/1763096?start=0&tstart=0

listes de propriétés devraient être utilisées pour les données qui sont surtout constituées de chaînes et de chiffres. Ils sont très inefficaces lorsqu'ils sont utilisés avec de gros blocs de données binaires.

0

Tom, Il existe de nombreuses façons sur iOS de stocker les données.

1- NSUserDefault

2- fichier plist

3- Base de données

Si vous avez des petites données puis, NSUserDefaults et Plist est la meilleure option (pas besoin de créer la base de données). Mais si vous avez une grande quantité de données, je vous suggère d'utiliser une base de données appropriée (Sqlite OU CoreData).