2010-07-07 14 views
5

¿Cuándo debo usar las primitivas en Objective-C en lugar de las subclases NSValue? Este código es ciertamente más limpio (creo) que el uso de NSNumber:Cuándo usar primitivas en Objective-C?

float width = sliderOne.frame.size.width; 
    float totalWidth = width * 2 + 10; 

pero ¿hay algún inconveniente? Además, ¿es correcto que no necesito llamar al release o algo con primitivas? ¿Se libera la memoria cuando salen del alcance, entonces?

Respuesta

4

Se prefieren los tipos básicos. Solo use los objetos NSNumber y NSValue cuando tenga que pasarlos como un objeto.

El único inconveniente de los tipos primitivos es que no puede pasarlos como un objeto.

Los tipos primitivos se pueden asignar en la pila (variables locales) o en el montón (w/malloc). Los objetos solo se pueden asignar en el montón, que es más caro que la asignación de pila.

+0

¿Por qué me importa que no puedo pasarlos como objetos? Lo siento si es una pregunta tonta procedente de un universo de autoboxing. –

+1

Si desea llamar a una API que toma un objeto NSNumber como parámetro o almacenarlos en un NSArray o NSDictionary, entonces tiene que ser un objeto. – progrmr

+1

Diría que se prefieren los tipos básicos * escalares *. Se necesitan circunstancias bastante especiales para que una matriz C o C sea preferible a una NSArray o NSString. – Chuck

0

Lo que sea más conveniente para usted en su propio código, pero normalmente usaría NSwhatever cuando deba pasarse a alguna API.

2

Un inconveniente principal del uso de tipos primitivos es que no puede almacenarlos en un NSArray.

+2

O cualquier objeto de colección de cacao – JeremyP

+0

de hecho, buena llamada – blu