Ознакомьтесь со спецификаторами формата String , чтобы узнать, как форматировать операторы NSLog. С NSLog легко лениться, потому что у объектов есть встроенный метод -description, который возвращает отформатированную строку. Для значений скейлера вы должны использовать правильный форматер.
Поскольку точность меняется при переходе с аппаратного обеспечения на аппаратное обеспечение, лучше привыкнуть использовать преобразования объектов для регистрации значений. В этом случае:
NSLog (@ "% @", [[NSNumber numberFromInt: myObject.myId] stringValue]);
Это будет печатать правильно всегда.
Редактировать # 1: я прошу прощения. Я был лишен сна, когда я написал выше. На самом деле я хотел предостеречь от использования простого int
против NSInteger
, а также печати с помощью NSNumber numberWithInteger:
.
Рассмотрим следующий запуск на 64-разрядном оборудовании.
int x=pow(2,63);
NSLog(@"x=%d",x); //prints x=2147483647
NSInteger n=pow(2,63);
NSLog(@"n=%d",n); // prints n=-1
NSLog(@"n=%@",[[NSNumber numberWithInteger:n] stringValue]); // prints n=9223372036854775807
В старые времена 8-битных систем вы сталкивались с проблемами при постоянном использовании 8-битного int. Для запуска цикла for с более чем 256 итерациями требуется long
. С 32-битным int
вы не увидите таких проблем и никогда не выработаете привычку отслеживать размер ваших int
переменных.
Это может привести к пагубным ошибкам, которые почти невозможно отследить, поскольку они встречаются только с очень конкретными и редкими значениями в данных.
Запись для iPhone (или других будущих мобильных телефонов / платформ) означает запись на потенциально сильно изменяющемся оборудовании, как мы делали в прежние времена. Лучше всего рано приобретать привычку использовать определения системы и API.
Редактировать # 2:
где myId - int, консоль дает
высокий номер как 70614496.
(1) Если при каждом запуске он печатает другое число, вы, вероятно, назначаете указатель на int при его установке. NSLog правильно печатает значение указателя как int.
(2) если он печатает одно и то же число каждый раз, у вас, вероятно, возникает проблема переполнения, как в моем первом редактировании выше.
В любом случае вам нужно посмотреть код, в котором вы присваиваете значение свойству id
, а не то, где вы его печатаете.