¿Hay algún límite en el almacenamiento de valores en NSUserDefaults?

Soy nuevo en el desarrollo de iPhone y el objective C He usado NSUserDefaults para almacenar algunos valores en mi aplicación. Pero no sé si hay algún límite para almacenar valores en NSUserDefaults . ¿Alguien puede ayudarme a saber eso?

Gracias por adelantado.

Mientras haya suficiente espacio en el iPhone / iPad, puede almacenar los valores de NSUserDefault. Todos esos valores se almacenan en un file .plist, y este file es muy pequeño, la mayoría de las veces less de 1 kb (a less que almacene una gran cantidad de datos).

Hay límites en los types que puede almacenar: todos deben ser objects de la Lista de properties, a saber, NSNumber , NSData , NSData , NSArray y NSDictionary . Además, solo puede almacenar NSArray y NSDictionary si los valores también son objects de list de properties; Además, todas las keys del NSDictionary deben ser cadenas.

Tenga en count que un object como UIColor no está en la list anterior. Por lo tanto, si desea almacenar un color en la database pnetworkingeterminada, primero deberá convertirlo en una cadena o un object de datos y luego volver a convertirlo cuando lea los valores pnetworkingeterminados.

En cuanto a los límites de tamaño, no hay ninguno documentado, pero tenga en count que todos los datos se almacenarán como un file de list de properties. El file completo se lee y escribe como un todo, por lo que si usa NSUserDefaults para almacenar una gran cantidad de datos que solo cambia en partes, perderá mucho time haciendo E / S innecesarias.

Todos han respondido la pregunta directa de "¿hay un límite?" Sin embargo, encontré este hilo realmente buscando entender " cuánto es demasiado para almacenar en UserDefaults?"

Si estás buscando esa respuesta, aquí hay un hilo útil. Las respuestas que encontré útiles fueron para ir al file de su proyecto y ver el tamaño del file de Plist:

5 objects es casi nada. ¡Estarás bien!


En mi máquina, tengo aproximadamente 28 megas de datos en mis valores pnetworkingeterminados de usuario. Eso no causa ningún problema en absoluto.


A partir de la experiencia de progtwigción general con matrices, supongo que el performance comienza a decaer rápidamente cuando te metes en 1000, dependiendo del tamaño del elemento. Por lo tanto, en un progtwig no tendría problemas para almacenar un par de cientos de elementos. Dicho esto, probablemente empiece a usar una database sqlite3 o conetworkingata, más temprano que tarde si yo fuera usted.

Importante recordar:

Lo anterior alivió mis preocupaciones de que mi creciente número de impagos (alnetworkingedor de 20-25 ahora) causaría problemas. Utilizo CoreData ya, por lo que estaba considerando qué usar ya que mi número de preferences / personalizaciones de usuarios permitidos está creciendo mucho. Por lo tanto, me voy a quedar con los valores pnetworkingeterminados del usuario.

Sin embargo , como han señalado otras respuestas, el file se leerá y escribirá en su totalidad. Entonces, leer 20 dictionarys de key / secuencia y 5 dictionarys key / boolean solo para recuperar una cadena … no es exactamente ideal. Sin embargo, si no perjudica el performance y le ahorra una tonelada de código, ¿por qué no?

No hay límite para almacenar valores en NSUserDefaults ..

Es lo que sea el tamaño de file máximo permitido en la unidad. ¡Puedes usar esta pieza de código para comprobarlo!

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *myKey = @"key"; int sizeOfFile = 1024; // Fill in proper file size here NSData myObject; NSString *someFilePath = @"PathToYourFileHere"; for(int i = 1; i < 9999999999999999; i++) { myObject = [NSData dataWithContentsOfFile:someFilePath]; [defaults setObject:myObject forKey:[NSString stringWithFormat:@"%@%i", myKey, i]]; NSLog(@"Iteration: %i, TotalWritten: %i", i, i * sizeOfFile); } 

La única limitación de almacenamiento en NSUserDefaults es la capacidad de almacenamiento del dispositivo .

Por mucho que haya espacio de almacenamiento disponible en un dispositivo iOS , prácticamente puede almacenar datos en NSUserDefaults . El par keyvalor se almacena en un file estructurado xml (. Plist ) que se almacena en un package de aplicaciones .

El sistema pnetworkingeterminado de usuario y el almacén de valores key están diseñados para almacenar types de datos simples ( cadenas , numbers , dates , valores booleans , URL , objects de datos , etc.) en una list de properties . El uso de una list de properties también significa que puede organizar sus datos de preferences utilizando types de arreglos y dictionarys. También es posible almacenar otros objects en una list de properties NSData primero en un object NSData .

  • Acerca del sistema de configuration pnetworkingeterminada de usuario

Según mi conocimiento, no hay límite para almacenar en NSUserdefaults.