1

自 xCode 5.1 以来,我收到以下警告:

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

在以下行:

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

标记为“端口”

这是声明:

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

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

4

2 回答 2

3

由于 的第三个参数CFStreamCreatePairWithSocketToCFHost是 type SInt32,因此您只需更改getStreamsToHostNamed方法的签名,如下所示:

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

通常,您应该避免在整数类型的 NS 包装器之间进行隐式转换,因为它们具有平台相关的实现。幸运的是,编译器会对此发出警告,因此您不必手动跟踪它们。

于 2014-03-28T14:24:23.467 回答
1

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

于 2014-03-28T14:22:47.750 回答