2010-07-07 20 views
5

Quando utilizzare le primitive in Objective-C anziché nelle sottoclassi NSValue? Questo codice è certamente più pulito (credo) che usare NSNumber:Quando utilizzare le primitive in Objective-C?

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

ma ci sono degli svantaggi? Inoltre, è corretto che non ho bisogno di chiamare release o qualcosa con primitive? La memoria viene liberata quando escono dal campo di applicazione, quindi?

risposta

4

Sono preferiti i tipi di base. Utilizzare gli oggetti NSNumber e NSValue solo quando è necessario passarli come oggetto.

L'unico svantaggio dei tipi primitivi è che non è possibile passarli come oggetto.

I tipi primitivi possono essere allocati nello stack (variabili locali) o nell'heap (w/malloc). Gli oggetti possono essere allocati solo nell'heap, che è più costoso dell'assegnazione dello stack.

+0

Perché mi interessa che non possa passarli come oggetti? Scusa se questa è una domanda stupida proveniente da un universo autoboxing. –

+1

Se si desidera chiamare un'API che accetta un oggetto NSNumber come parametro o lo memorizza in un NSArray o NSDictionary, deve essere un oggetto. – progrmr

+1

Direi che sono preferiti i tipi * scalari * di base. Ci vogliono circostanze piuttosto speciali per un array C o una stringa C preferibile su un NSArray o NSString. – Chuck

0

Qualunque sia il più conveniente da utilizzare nel proprio codice, ma in genere si utilizzerà NSwqualunque si debba passare a qualche API.

2

Uno svantaggio principale dell'utilizzo di tipi primitivi è che non è possibile memorizzarli in un NSArray.

+2

O qualsiasi oggetto di raccolta Cocoa – JeremyP

+0

in effetti, buona chiamata – blu

Problemi correlati