2010-03-18 13 views
4

je n'ai qu'une petite question:CFPreferences crée plusieurs fichiers

Pourquoi l'CFPreferences-API crée plusieurs fichiers dans mon userprefs Directory? Tous les fichiers ont mon Bundle-Identifier le nom et tous (sauf celui, l'original) ont ajouté un suffixe comme celui-ci:

  • com.myComp.myApp.plist < - (seulement ce plist-fichier doit être créé)
  • com.myComp.myApp.plist.0qzcicc
  • com.myComp.myApp.plist.8dhjfht

Répondre

3

Cela ressemble beaucoup à un effet secondaire de l'écriture atomique.

L'écriture atomique signifie que, chaque fois qu'un fichier doit être écrit à partir d'un objet NSData (ou autre), le fichier est d'abord créé en utilisant un nom de fichier temporaire dans le même répertoire. Ensuite, toutes les données sont écrites dans ce fichier (opération qui n'est généralement pas atomique). Après avoir fermé le fichier, il est renommé en nom de fichier d'origine. Le renommage est une étape atomique, qui garantit que tout autre processus susceptible d'examiner le fichier voit l'ancien fichier complet ou le nouveau fichier complet. Il est impossible qu'un processus ne voit que la moitié d'un fichier.

Les fichiers nommés drôles ressemblent à des artefacts de ce processus. Peut-être que votre application s'est écrasée au milieu d'une écriture atomique?

0

Si vous ne synchronisez lors de l'arrêt de l'application par exemple:

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
} 

Il va essayer d'écrire dans le fichier fictif d'abord et faire un changement de nom atomique après. Si l'écriture prend trop de temps, vous finirez avec un fichier fictif.

Dans mon cas, j'ai eu quelques utilisateurs avec des plistes 14mb et finissent par avoir beaucoup de fichiers fictifs (prenant presque 2G).

Mon problème et mon problème était de compresser une image que j'avais écrite pour l'utilisateur par défaut.