Правильное преобразование NSString в CGFloat, NSInteger и т. Д. - PullRequest
9 голосов
/ 02 декабря 2009

У меня есть вопрос о безопасном или правильном преобразовании NSString в такие типы, как CGFloat и NSInteger, учитывая, что это просто типы оболочек, которые Apple создала для использования различных примитивов в зависимости от определенных факторов (например, NSInteger - от typedef до int на 32-разрядных архитектурах и long на 64-разрядных архитектурах.

Например, я знаю, что могу использовать что-то вроде [ someString intValue ] или [ someString longValue ], но как вместо этого сказать, что я хочу, чтобы someString стал NSInteger, позволяя выбирать точность базового примитива? компилятором? Сказать что-то вроде NSInteger integer = [ someString intValue ] приведет к потере данных, если someString был создан из NSInteger в 64-битной системе, верно? Как лучше всего справиться с этой ситуацией?

1 Ответ

11 голосов
/ 02 декабря 2009

Используйте integerValue вместо. И получение int вызовет проблему, только если целое число, представленное строкой, больше, чем 32-битный INT_MAX, но все же лучше использовать более совместимый метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...