Metodo di sincronizzazione NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:@"xxxxxxxx" forKey:@"name"]; [defaults synchronize]; 

Ho bisogno di sapere perché devo usare l’ultima riga del codice sopra [defaults synchronize] ? Qual è lo scopo di usarlo? È un must?

Lo scopo di [default synchronize]; è fare in modo che i valori predefiniti dall’utente vengano scritti immediatamente sul disco. Non è necessario chiamarlo esplicitamente, iOS lo fa già nei momentjs appropriati. Quindi puoi rimuovere quella linea. In realtà, si tratta di un problema di prestazioni se si chiama la synchronize ogni volta che si imposta un valore predefinito.

Prima di iOS 7, le impostazioni predefinite dell’utente erano sempre sincronizzate quando l’applicazione passava in background. A partire da iOS 7, non è più il caso, quindi è ansible che si desideri chiamare la synchronize nell’appDidEnterBackground del delegato applicationDidEnterBackground: oppure registrarsi alla notifica UIApplicationDidEnterBackgroundNotification per farlo.

Dalla documentazione per -[NSUserDefaults synchronize] :

Poiché questo metodo viene automaticamente richiamato a intervalli periodici, utilizzare questo metodo solo se non è ansible attendere la sincronizzazione automatica (ad esempio, se l’applicazione sta per uscire) o se si desidera aggiornare l’utente su quello che è su disco, anche se non hai apportato alcuna modifica.

Non devi più scrivere quella riga.

Il riferimento al metodo dalla documentazione aggiornata

Attende eventuali aggiornamenti asincroni in sospeso al database di default e restituisce; questo metodo non è necessario e non dovrebbe essere usato.

Commenti al metodo che spiega cosa fare.

  /*! -synchronize is deprecated and will be marked with the NS_DEPRECATED macro in a future release. -synchronize blocks the calling thread until all in-progress set operations have completed. This is no longer necessary. Replacements for previous uses of -synchronize depend on what the intent of calling synchronize was. If you synchronized... - ...before reading in order to fetch updated values: remove the synchronize call - ...after writing in order to notify another program to read: the other program can use KVO to observe the default without needing to notify - ...before exiting in a non-app (command line tool, agent, or daemon) process: call CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication) - ...for any other reason: remove the synchronize call */ open func synchronize() -> Bool 

Sì, con quella linea stai dicendo al tuo sistema di caricare NSUserDefaults con i tuoi nuovi valori predefiniti.

Puoi trovare tutte le informazioni qui: