2010-07-07 18 views
5

Quand devrais-je utiliser des primitives dans Objective-C au lieu des sous-classes NSValue? Ce code est certainement plus propre (je pense) que d'utiliser NSNumber:Quand utiliser des primitives en Objective-C?

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

mais y a-t-il des inconvénients? Aussi, est-il correct que je n'ai pas besoin d'appeler release ou quoi que ce soit avec des primitives? Est-ce que la mémoire se libère quand ils sortent de la portée, alors?

Répondre

4

Les types de base sont préférés. N'utilisez les objets NSNumber et NSValue que lorsque vous devez les passer en tant qu'objet.

Le seul inconvénient des types primitifs est que vous ne pouvez pas les passer en tant qu'objet.

Les types primitifs peuvent être alloués sur la pile (variables locales) ou sur le tas (w/malloc). Les objets ne peuvent être alloués que sur le tas, ce qui est plus coûteux que l'allocation de pile.

+0

Pourquoi est-ce que je me soucie de ce que je ne peux pas les passer en tant qu'objets? Désolé si c'est une question stupide venant d'un univers autoboxing. –

+1

Si vous souhaitez appeler une API qui prend en paramètre un objet NSNumber ou les stocke dans un NSArray ou un NSDictionary, il doit s'agir d'un objet. – progrmr

+1

Je dirais que les types basic * scalar * sont préférés. Il faut des circonstances assez spéciales pour qu'un tableau C ou une chaîne C soit préférable à un NSArray ou NSString. – Chuck

0

Tout ce qui est plus pratique à utiliser dans votre propre code, mais généralement, vous utiliseriez NSwhatever quand il doit être passé à une API.

2

Un inconvénient principal de l'utilisation de types primitifs est que vous ne pouvez pas les stocker dans un NSArray.

+2

Ou tout objet de collection Cocoa – JeremyP

+0

en effet, bon appel – blu