2017-09-16 1 views
0

J'ai une application assez large dans laquelle je stocke beaucoup de données. CLLocation ones, tableaux, CGPoints et ainsi de suite. De temps en temps, il est nécessaire de sauvegarder toutes ces variables sur l'appareil, donc j'utilise UserDefaults. Pourtant, après un certain temps de passer par ViewControllers et simplement en utilisant l'application (changement constant de données => la sauvegarde constante) j'arrive au point où tout tourne lentement. Maintenant, supposons que j'ai plus ou moins trois tableaux bidimensionnels et disons 5 Ints que je veux sauvegarder dans UserDefaults.Réglage multiple de UserDefaults résultant en un affichage plus lent

Chaque fois que je change l'une des variables I « mise à jour » par la même commande:

UserDefaults.standard.set(data, forKey: "UDdata"). 

Ainsi, chaque fois que je veux que les données changent, je change à travers ce commentaire particulier. Je suppose que chaque fois que je le fais, je devrais d'une façon ou d'une autre me débarrasser des données précédentes pour la clé UDdata et juste la définir avec la même chaîne de clé? Des informations à ce sujet seraient utiles. Merci d'avance

+3

'UserDefaults' n'est pas l'endroit approprié pour stocker des données d'application. C'est destiné aux petites valeurs comme les préférences. – rmaddy

+0

alors que @rmaddy a certainement raison, je ne pense pas que l'utilisation abusive UserDefaults ici est votre problème. Je n'ai jamais eu l'occasion de ralentir au moins;) Quoi qu'il en soit, je serais plus enclin que c'est une fuite de mémoire générale –

+0

Je suggère fortement d'utiliser l'instrument 'profil temporel' dans Instruments.app pour enquêter directement sur votre problème. –

Répondre

2

La raison est que vous utilisez abusivement les paramètres utilisateur. Ils doivent stocker de petites valeurs comme des drapeaux pour détecter les premiers lancements, les préférences, etc. Au lieu de stocker des données dans Userdefaults, essayez simplement d'utiliser CoreData ou SQLite. Ce qui est beaucoup plus facile à utiliser aussi.

CoreData: https://www.raywenderlich.com/145809/getting-started-core-data-tutorial

SQLite: https://www.raywenderlich.com/123579/sqlite-tutorial-swift