2012-12-25 2 views
5

La documentation de NSUserDefaults indique que la méthode synchronise est appelée périodiquement mais ne mentionne pas la fréquence. 10 minutes de recherches sur Google n'ont rien révélé.À quelle fréquence NSUserDefaults est-il synchronisé?

À quelle fréquence la méthode synchronise est-elle appelée?

+0

Nous ne savons pas. C'est un détail d'implémentation sur lequel vous ne devriez pas compter. Si vous devez persister les changements, '- synchronize' manuellement. –

+0

Cependant, si vous êtes curieux de savoir à quelle fréquence il est appelé, pourquoi ne pas exécuter une méthode swizzling à un simple 'NSLog()' et le découvrir vous-même? –

+0

Merci, je n'y ai pas pensé. – duci9y

Répondre

8

Ceci est un détail de mise en œuvre qui n'est pas divulgué (il ne s'agit probablement pas d'un intervalle de temps constant). Cependant, vous pouvez le trouver vous-même en effectuant une méthode de swizzling sur - [NSUserDefaults synchronize] et en modifiant son implémentation afin qu'elle appelle NSLog() chaque fois qu'elle est synchronisée.

+0

Cela fait 20 minutes que j'ai démarré le programme et 'synchronise' n'a pas encore été appelé, même après avoir changé les valeurs. J'ai fait le droit de balayer. J'abandonne maintenant. – duci9y

+0

@ duci9y D'accord. Leçon apprise: ne comptez pas sur Apple, car ils trichent :) Merci pour l'acceptation. –

+3

La synchronisation automatique ne passe pas par le même chemin de code que la synchronisation manuelle (en particulier, elle est implémentée dans CFPreferences, que NSUserDefaults utilise). Sur 10.7 et iOS, il s'agit d'un intervalle d'environ 15 secondes après un changement, même s'il n'est pas constant. Sur 10.8+, il est plus court en raison de l'amélioration des performances de synchronisation. –

Questions connexes