Si les entiers ne peuvent pas être écrits dans un dictionnaire, puis à un .plist, mais Nsnumbers peut être préférable d'utiliser des nsnumbers dans l'application, plutôt que de ne pas convertir à chaque fois d'économiser ou de charger un dictionnaire d'un .plist? < / p>
3 Réponses :
nsnumber est hérité de l'objet Wrapper NSValue. P>
int n'est pas objet. p>
Si vous utilisez Nsnumber U, vous pouvez obtenir de plus en plus de fonction à utiliser avec eux. P>
nsnumber est une classe qui vous aide à stocker des types numériques comme objet. Il dispose de méthodes de convertir entre différents types et méthodes pour extraire une représentation de chaîne de votre valeur numérique. Si vous utilisez une journée variable de type nsnumber * comme vous l'avez fait dans votre exemple, vous ne modifiez pas la valeur de la journée mais son adresse mémoire. P>
Tout dépend de votre besoin. Mais si l'API vous oblige à utiliser int em>, vous devez utiliser int em>. Il vous demande d'utiliser nsnumber em> Vous devez utiliser nsnumber em>. Par exemple, si vous utilisez un uisegmentedControl em>, et vous voulez Sélectionnez un segment, puis, P> [segmentedControl setSelectedSegmentIndex:aIntVar]; // Can not use NSNumber here
// or
[segmentedControl setSelectedSegmentIndex:[aNumber intValue]];
comme généralisation: il suffit de rester avec des types de pod jusqu'à ce que vous besoin em> utiliser une représentation basée sur un objet, tel que Dans certains cas, il peut être logique d'utiliser Mise à jour / Détails: EM> Le temps d'exécution de l'OBJC sera dans certains cas, sur certaines architectures, et sur certaines versions du système d'exploitation substituer un pointeur nsnumber code>. La performance est bien meilleure avec les gousses, mais vous aurez besoin
nsnumber code> dans certains cas. P>
nsnumber code> à la place - ceci est typiquement lorsque vous réutiliser em> a
nsnumber code> souvent - ceci est d'éviter de faire une tonne de duplicata
nsnumber code> s. De telles occurrences sont pratiques uniquement au-delà de la sérialisation et des interfaces génériques Objc (liaisons, transformateurs, dictionnaires). P>
nsnumber code > S de type et de domaine spécifiques. Bien que la représentation interne ait changé depuis de l'origine de quelques années de retour, voici une bonne introduction au sujet: http://objectivistc.tumblr.com/post/7872364181/tagged-pointer-and-fast-pathed-cfnumber-integers-in . Lorsque cela peut être utilisé, cela vous évite d'opérations lentes telles que des allocations, un verrouillage et des ops Ref. Néanmoins, des pointeurs marqués sont incapables de représenter tous les nombres et introduisent les frais généraux. Vous devez donc toujours favoriser les produits de base sur
nsnumber code> par défaut. Les pointeurs marqués sont une excellente optimisation, le cas échéant, mais sont loin d'être en concurrence avec les cométiches lorsque vous avez juste besoin d'un numéro em>. P>
La grande chose est que KVC prend en charge l'autoboxage, c'est-à-dire une conversion entre types scalaires et nsnumber. Il est donc peu nécessaire d'utiliser NSNumber dans les propriétés.
Vous voudrez peut-être réviser cela compte tenu des implications des appareils 64 bits.
Notez que l'attribution de la mémoire est chère. Vous voudrez peut-être faire votre propre classe similaire à Nsnumber qui serait mutable.
Préfère
nsinteger code> sur
int code>. Ceci est plus portable parmi diverses versions de OS X.
Vous pouvez simplement substituer simplement un
nsnumber code> (un objet) pour un
int code> (une "valeur scalaire"). Il serait incroyablement maladroit de conserver toutes les quantités numériques dans un
nsnumber code> et de convertir de / à pour chaque calcul. Utilisation de
Nsinteger code> au lieu de
int code>, d'autre part, est une chose raisonnable à faire.