隐式转换失去整数精度xcode 5.1

时间:2014-03-28 14:14:57

标签: ios objective-c xcode warnings xcode5.1

因为xCode 5.1我得到以下警告:

Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'SInt32' (aka 'int')

在以下行:

(void) CFStreamCreatePairWithSocketToCFHost(NULL, host, port, &readStream,&writeStream);

标记为ist'port'

这是宣言:

+ (void)getStreamsToHostNamed:(NSString *)hostName port:(NSInteger)port inputStream:(NSInputStream **)inputStream outputStream:(NSOutputStream **)outputStream

有人可以帮我解决这个警告吗?

2 个答案:

答案 0 :(得分:3)

由于CFStreamCreatePairWithSocketToCFHost的第三个参数属于SInt32类型,您只需更改getStreamsToHostNamed方法的签名,如下所示:

+ (void)getStreamsToHostNamed:(NSString *)hostName
                         port:(SInt32)port
                  inputStream:(NSInputStream **)inputStream
                 outputStream:(NSOutputStream **)outputStream

通常,您应该避免整数类型的NS包装器之间的隐式转换,因为它们具有依赖于平台的实现。幸运的是,编译器会发出有关此问题的警告,因此您无需手动跟踪它们。

答案 1 :(得分:1)

我看到的最佳解决方案是将NSInteger更改为SInt32或将SInt32更改为NSInteger,具体取决于需要的数量。如果你只是在-2147483648和2147483647之间使用,那么SInt32应该足够好了。如果是这种情况并且无法更改任何一个,只需使用显式转换为SInt32来绕过警告,但如果数字超出该范围,它可能会影响结果。