Si los enteros no se pueden escribir en un diccionario y luego en .plist, pero NSNumbers puede usar NSNumbers en toda la aplicación, en lugar de tener que convertir el almacenamiento de todos los tiempos o cargar un diccionario desde a. plist?NSNumber vs Int
Respuesta
Como una generalización: Sólo se adhieren con los tipos de POD hasta que necesidad usar una representación basada en objetos, como NSNumber
. El rendimiento es mucho mejor con los POD, pero en algunos casos necesitará NSNumber
.
En algunos casos, puede tener sentido utilizar NSNumber
lugar - esto es por lo general cuando se reutilización un NSNumber
menudo - esto es para evitar hacer una tonelada de duplicados NSNumber
s. Tales ocurrencias son prácticas raras veces más allá de la serialización y las interfaces de objc genéricas (enlaces, transformadores, diccionarios).
actualización/Detalles: El tiempo de ejecución será ObjC en algunos casos, en algunas arquitecturas, y en algunas versiones del sistema operativo sustituir un etiquetada puntero que representa NSNumber
s de tipo específico y el dominio. Aunque la representación interna ha cambiado desde que se escribió originalmente hace unos años, aquí hay una buena introducción al tema: http://objectivistc.tumblr.com/post/7872364181/tagged-pointers-and-fast-pathed-cfnumber-integers-in. Donde esto se puede usar, le ahorra operaciones lentas como asignaciones, bloqueo y operaciones de conteo. Sin embargo, los punteros etiquetados son incapaces de representar cada número e introducen sobrecarga, por lo que aún debería favorecer las construcciones internas básicas por encima de NSNumber
de forma predeterminada. Los punteros etiquetados son una gran optimización cuando corresponde, pero están lejos de competir con los edificios cuando solo necesitas un número .
Lo bueno es que KVC admite el autoboxing, es decir, la conversión entre tipos escalares y NSNumber, por lo que no es necesario utilizar NSNumber en las propiedades. – DrMickeyLauer
Es posible que desee revisar esto teniendo en cuenta las implicaciones de los dispositivos de 64 bits. – user
@ actualización de usuario agregada – justin
NSNumber es un objeto heredado del objeto envoltorio NSValue.
int no es el objeto.
si utiliza NSNumber puede obtener más y más funciones para utilizar con ellas.
NSNumber es una clase que te ayuda a almacenar los tipos numéricos como objeto. Tiene métodos para convertir entre diferentes tipos y métodos para recuperar una representación de cadena de su valor numérico. Si usa un día variable del tipo NSNumber * como lo hizo en su ejemplo, no está modificando el valor del día sino su dirección de memoria.
Todo depende de su necesidad. Pero, si la API requiere que use int, debe usar int. Le pide que use NSNumber debe usar NSNumber.
Por ejemplo, si está utilizando un UISegmentedControl y desea seleccionar un segmento, entonces,
[segmentedControl setSelectedSegmentIndex:aIntVar]; // Can not use NSNumber here
// or
[segmentedControl setSelectedSegmentIndex:[aNumber intValue]];
- 1. int vs NSNumber vs NSInteger
- 2. un NSNumber a un int
- 3. int vs const int &
- 4. int ** vs int [FILAS] [COLS]
- 5. Explicación de int? vs int
- 6. cómo convertir NSNumber a int en Objective-C
- 7. C++: long long int vs. long int vs. int64_t
- 8. Mysql middle int vs. int performance
- 9. usando uint vs int
- 10. GUID vs INT IDENTIDAD
- 11. System.Convert.ToInt vs (int)
- 12. Uninitialized int vs Integer
- 13. Usando int vs Integer
- 14. MySQL: bigint Vs int
- 15. Entero objetos int vs
- 16. Java: Enum vs. Int
- 17. Int32 Int64 vs vs Int en C#
- 18. NSNumber arithmetic
- 19. ASP/VBScript - Int() vs CInt()
- 20. Decimal VS Int en MySQL?
- 21. PHP Security - (int) vs FILTER_VALIDATE_INT
- 22. INT vs VARCHAR en busca
- 23. int vs size_t en 64bit
- 24. Int ID vs. Identificación varchar
- 25. double double vs long int
- 26. largo largo vs int multiplicación
- 27. vinculando NSTextField al NSNumber
- 28. Comparación de dos objetos NSNumber
- 29. Casting (int?) Null vs. new int?() - ¿Qué es mejor?
- 30. IList <int> vs Lista <int>
Tenga en cuenta que la asignación de memoria es costosa. Es posible que desee hacer su propia clase similar a NSNumber que sería mutable. –
Prefiere 'NSInteger' sobre' int'. Esto es más portable entre varias versiones de OS X. – mouviciel
Usted puede simplemente sustituir un 'NSNumber' (un objeto) por un' int' (un "valor escalar").Sería increíblemente incómodo mantener cada cantidad numérica en un 'NSNumber' y convertir de/a para cada cálculo. Usar 'NSInteger' en lugar de' int', por otro lado, es algo razonable de hacer. –