La diferencia es que el primer código-fragmento de código se registra valores por defecto que se utilizará cuando el usuario no ha realizado ningún cambio en la propiedad".
Por lo tanto, si desea proporcionar una "propiedad" con el nombre de clave "Mensaje de bienvenida", en lugar de que la propiedad devuelva nil inserte un mensaje predeterminado "Bienvenido primer usuario" que se mostrará cuando no ha habido cambios en la propiedad.
Esto simplificará su lógica porque no necesita escribir una prueba if
para comprobar si la "propiedad" devuelve cero y luego hacer otro mensaje si este es el caso.
NSString *greeting = [[NSUserDefaults standardUserDefaults] stringForKey:@"Greeting"];
if(greeting == nil) {
NSLog(@"Welcome first-time user!");
}
El segundo fragmento de código que ha publicado es para configurar la propiedad a otro valor. Tendrá diferentes métodos de configuración (setString, setObject, setBoolean) para establecer valores según el estado de su programa en Userdefaults.
EDITAR ----- Actualizaciones requeridas en el comentario.
El primer método es para registrar los valores por defecto, como su nombre lo indica. La primera vez que acceda a la propiedad con algún nombre de clave, el valor será nil para los objetos, falso para los booleanos o 0 para los números. En lugar de hacer muchas pruebas, etc., si los valores no están establecidos en el programa y luego realiza una acción "predeterminada" como el ejemplo anterior, puede enviar su aplicación con algunos valores ya predefinidos para estas claves.
Un lugar típico para poner el registerDefaults está en el método initializer en la aplicaciónDelegate.
Entonces en algún lugar de su programa, puede que desee establecer los valores de estos campos a continuación, se utiliza el setObject, setString, setBoolean ... y para recuperar utiliza stringForKey, objectForKey ...
Piense en ello como este
registerDefaults es el constructor en el que puede proporcionar valores razonables para el objeto, de lo contrario obtendrá algunos valores predeterminados que ya he escrito. Luego, más adelante, si desea cambiar los atributos del objeto, NO usa el "constructor" sino los métodos set/get.
Hmmm Todavía no entiendo muy bien.¿Quiere decir que puedo establecer la propiedad de @ "algo" a un Objeto utilizando uno de los fragmentos de código, pero solo el primero comprobará si ya tengo el valor escrito antes, ¿es correcto? Si tengo algo escrito antes, no reescribiré el valor, ¿es correcto? –
Respuesta actualizada. – LuckyLuke
¡Gracias por la respuesta actualizada! Solo una pequeña cosa. Si pongo registerDefault en AppDelegate, ¿significa eso que no se llamará más de una vez? Por ejemplo, mi fragmento de código, solo establecerá @ "algo" para un Objeto una vez, ¿correcto? A pesar de que el código se ejecuta en el AppDelegate cada vez que lance la aplicación? –