En una especie de simetría con su earlier question, NSNumber
es un tipo de objeto. Es necesario para crearla a través de una invocación de métodos tales como:
[p setAge:[NSNumber numberWithInt:10]];
su código actual está intentando simplemente a emitir el número entero arbitrario 10
a un puntero. Nunca haga esto: si el compilador no le advirtió al respecto, entonces estaría tratando de acceder a algunos bytes completamente inapropiados en la ubicación de la memoria 10
como si fueran un objeto NSNumber
, que no serían. Hacer eso lleva a las lágrimas.
Ah, y sólo para adelantarse a las siguientes cuestiones obvias, recuerde que si desea utilizar el valor de un objeto NSNumber
, que necesita para obtener en esa vía método llama también, por ejemplo:
if ([[p age] intValue] < 18)
...
(NSNumber
es inmutable, y yo creo se implementa de tal manera que los mismos valores se asignan a un mismo objeto. Así que es probable que sea posible de salirse con comparaciones directas puntero para la igualdad de valor entre NSNumber
objetos. Pero por favor, no , porque eso sería una dependencia inapropiada de un detalle de implementación. Utilice isEqual
lugar)
Gracias por anticipar el próximo número :) –
Solo un subconjunto de posibles valores NSNumber se almacena en caché como singletons, el resto son instancias individuales. El conjunto exacto de lo que se almacena en caché ha cambiado a lo largo del tiempo (y es probable que cambie en el futuro). +1 para enfatizar el uso de 'isEqual:'. – bbum