2016-05-12 1 views
-1

Récemment, j'ai trouvé un problème intéressant lié à l'initialisation de NSNumber.Numéro d'initialisation de NSNumber

La différence s'est produite entre le simulateur (9.3.1) et le périphérique (9.3.1).

Supposons que nous avons int x = 2; Maintenant, nous initialisons NSNumber et le passons à une méthode.

NSNumber *test = [NSNumber numberWithInt:self.x]; 
[self.method setTestNumber: test]; 

Ces deux lignes ont eu un résultat correct sur le simulateur et le périphérique.

MAIS en utilisant uniquement cette ligne

[self.method setTestNumber:[NSNumber numberWithInt:self.x]]; 

avait résultat tout à fait inattendu. L'exécution sur le simulateur NSNumber intValue était égale à 2.

L'exécution sur le périphérique avait une valeur aléatoire incorrecte. Comment est-ce possible? L'appareil est l'iPad 4 A1458. Également testé sur iPad 3 16GB. Le même problème s'est produit. Pouvez-vous vérifier ce problème?

+2

Je ne peux pas reproduire votre problème. Il serait utile de voir à quoi ressemble votre classe "méthode" et comment vous l'initiez. – tuvok

+0

écrivez votre méthode 'setTestNumber'. Problème devrait être là dans cette méthode – Lion

+0

Que voulez-vous dire par "simulateur (9.3.1)"? Nous n'avons pas publié d'exécution de simulateur iOS 9.3.1. Je suppose que vous voulez dire avec iOS 9.3? –

Répondre

0

Le compilateur optimisera réellement ces deux chemins de code exactement comme asm. Il n'y a pas de différence entre eux.

+0

Je le reproduirai plus tard et posterai le code exact/le repo github + des captures d'écran montrant cet effet sur side-project. Je ne peux pas poster de code exact maintenant à cause de la NDA. –