Dans une sorte de symétrie avec votre earlier question, NSNumber
est un type d'objet. Vous devez créer via une invocation de méthode telle que:
[p setAge:[NSNumber numberWithInt:10]];
Votre code actuel tente simplement de jeter l'entier arbitraire 10
à un pointeur . Ne faites jamais: si le compilateur ne vous a pas averti à ce sujet, vous essayez alors d'accéder à des octets complètement inappropriés à l'emplacement mémoire 10
comme s'ils étaient un objet NSNumber
, ce qui ne serait pas le cas. Faire ce genre de choses conduit à des larmes.
Oh, et juste pour préempter les prochains problèmes évidents, rappelez-vous que si vous souhaitez utiliser la valeur dans un objet NSNumber
, vous devez obtenir à ce via des appels de méthode aussi, par exemple:
if ([[p age] intValue] < 18)
...
(NSNumber
est immuable, et je pense il est mis en œuvre de telle sorte que des valeurs identiques sont mis en correspondance avec le même objet. il est donc probablement possible de sortir avec des comparaisons de pointeur direct pour la valeur d'égalité entre NSNumber
objets. Mais s'il vous plaît ne pas, parce que ce serait une dépendance inappropriée à un détail de mise en œuvre. Utilisez isEqual
à la place)
Merci d'avoir anticipé le prochain numéro :) –
Seul un sous-ensemble de valeurs NSNumber possibles est mis en cache en tant que singletons, le reste étant des instances individuelles. L'ensemble exact de ce qui est mis en cache a changé avec le temps (et changera probablement dans le futur). +1 pour souligner l'utilisation de 'isEqual:'. – bbum