2016-05-12 2 views
-1

Недавно я нашел интересную проблему, связанную с инициализацией NSNumber.Проблема с инициализацией NSNumber

Разница между тренажером (9.3.1) и устройством (9.3.1).

Предположим, что у нас есть int x = 2; Теперь мы инициализируем NSNumber и передаем его методу.

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

Эти две линии имели правильный результат как на симуляторе, так и на устройстве.

НО используя только эту линию

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

имел весьма неожиданный результат. Запуск его на тренажере NSNumber intValue был равен 2.

Запуск его на устройстве имел неправильное случайное значение. Как это возможно? Устройство - iPad 4 A1458. Также протестировано на iPad 3 16GB. Произошла та же проблема. Вы можете проверить эту проблему?

+2

Я не могу воспроизвести вашу проблему. Было бы полезно посмотреть, как выглядит ваш класс «метод» и как вы его инициализируете. – tuvok

+0

напишите свой метод setTestNumber. Проблема должна быть в этом методе – Lion

+0

Что вы подразумеваете под "simulator (9.3.1)"? Мы не выпустили версию симулятора iOS 9.3.1. Я предполагаю, что вы имеете в виду iOS 9.3? –

ответ

0

Компилятор фактически оптимизирует эти две кодировки к тому же самому asm. Между ними нет никакой разницы.

+0

Я воспроизведу его позже и разместите точный код/​​github repo + скриншоты, показывающие этот эффект на побочном проекте. Теперь я не могу написать точный код из-за NDA. –