Question idiote sur NSNumber

clampinclampin Membre
02:42 modifié dans API AppKit #1
Bonjour

Pour savoir si j'ai bien compris, est-ce que :

<br /><br />NSNumber * nombre1 = [NSNumber numberWithInt:12];<br /><br />


Peut être équivalent à 

<br /><br />int nombre1;<br /><br />nombre1 = 12;<br /><br />


PS : Si je ne suis pas dans le bon forum, merci de rediriger....

Réponses

  • BruBru Membre
    02:42 modifié #2
    Oui.

    int est un type (ancien) du (vieux) langage C, tandis que NSNumber est une classe permettant de stocker un nombre (dans ton exemple, un nombre issu d'un int).

    .
  • 02:42 modifié #3
    Juste parce que j'ai envie de contrarier mon monde, moi j'aurais plutôt dit non pour répondre à  la question.

    Les 2 formes ne sont pas équivalentes:
    - la forme "objective-c" (NSNumber donc) est un objet, et peut de ce fait être manipulé comme tous les autres objets (soumise au retain/release, stockées dans un NSArray,...)
    - la forme "antique" est par contre utile car elle est utilisable pour faire des calculs (tu ne peux pas additionner 2 nsnumber sans les convertir en int).

    donc il faut un peu jongler entre les 2.
  • BruBru Membre
    02:42 modifié #4
    dans 1159015998:

    (tu ne peux pas additionner 2 nsnumber sans les convertir en int).


    Quoique, en utilisant la sous-classe NSDecimalNumber de NSNumber, on peut faire ces opérations :
    <br />&nbsp; &nbsp; NSDecimalNumber *dn1, *dn2, *dn3;<br /><br />&nbsp; &nbsp; dn1=[NSDecimalNumber numberWithInt:12];<br />&nbsp; &nbsp; dn2=[NSDecimalNumber numberWithInt:4];<br />&nbsp; &nbsp; dn3=[dn1 decimalNumberByAdding:dn2];<br />&nbsp; &nbsp; NSLog(@&quot;%@+%@=%@&quot;, dn1, dn2, dn3);<br />
    


    Ce qui donne :
    [tt]2006-09-23 15:37:34.604 progressbar-cifilter[19861] 12+4=16[/tt]

    .
Connectez-vous ou Inscrivez-vous pour répondre.