正确地将NSString转换为CGFloat,NSInteger等

时间:2009-12-02 19:15:28

标签: objective-c types nsstring

我有一个关于安全或正确地将NSString转换为CGFloatNSInteger等类型的问题,因为这些只是Apple创建的使用不同基元的包装类型,具体取决于某些因素(例如,NSInteger在32位体系结构上为typedef'到int,在64位体系结构上为long

例如,我知道我可以使用[ someString intValue ][ someString longValue ]之类的内容,但我怎么说我希望someString成为NSInteger,允许编译器选择的基础原语的精度?如果NSInteger integer = [ someString intValue ]是从64位系统上的someString创建的,那么说NSInteger之类的内容会导致数据丢失,对吧?处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:11)

请改用integerValue。如果字符串表示的整数大于32位INT_MAX,那么获取int只会导致问题,但使用更兼容的方法仍然会更好。