因为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
有人可以帮我解决这个警告吗?
答案 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来绕过警告,但如果数字超出该范围,它可能会影响结果。