Сравнение NSNumber iOS SDK 4.2 против 5, в Objective-C? - PullRequest
0 голосов
/ 17 ноября 2011

Я обнаружил ошибку в своем приложении: логика заключалась в том, что я сравнивал два NSNumbers с использованием "==", и я считаю, что раньше это работало. Но он больше не работает на iOS SDK 5, поэтому мне нужно использовать isEqualToNumber.

Может кто-нибудь с iOS SDK 4.2, пожалуйста, попробуйте запустить следующий код и дать мне результат. Я попытался вернуться к более старому Xcode, чтобы протестировать его сам, но я не смог этого сделать.

NSNumber *num1 = [NSNumber numberWithInt:100];
NSNumber *num2 = [NSNumber numberWithInt:100];

if (num1 == num2)
{
    NSLog(@"== YES");
}
else
{
    NSLog(@"== NO");
}

1 Ответ

6 голосов
/ 17 ноября 2011

isEqualToNumber является правильным решением здесь. Тот факт, что раньше он работал, - это просто деталь реализации того, как числа кэшировались системой внутри. Вы никогда не должны (читай, вероятно, не то, что вы действительно хотите сделать) сравнивать объекты, используя ==. == на объектах будет сравнивать их адреса памяти, если они на самом деле не равны.

...