我有一个关于安全或正确地将NSString
转换为CGFloat
和NSInteger
等类型的问题,因为这些只是Apple创建的使用不同基元的包装类型,具体取决于某些因素(例如,NSInteger
在32位体系结构上为typedef
'到int
,在64位体系结构上为long
。
例如,我知道我可以使用[ someString intValue ]
或[ someString longValue ]
之类的内容,但我怎么说我希望someString
成为NSInteger
,允许编译器选择的基础原语的精度?如果NSInteger integer = [ someString intValue ]
是从64位系统上的someString
创建的,那么说NSInteger
之类的内容会导致数据丢失,对吧?处理这种情况的最佳方法是什么?
答案 0 :(得分:11)
请改用integerValue
。如果字符串表示的整数大于32位INT_MAX,那么获取int只会导致问题,但使用更兼容的方法仍然会更好。