- 本文章仅为个人实践,个人思考,个人总结,仅供参考,如有错误纯属正常,欢迎指出。
2016.2.16
Sending 'const NSString *__strong' to parameter of type 'NSString **' discards qualifiers
最开始我是这么玩的。
static NSString const *raven = @"raven";
NSString *str = raven;
然后警告就出来了。
警告意思是,丢掉了const限定词。
static NSString const *raven = @"raven";
NSString *str = raven;//即str本身也好,*str也好都不带有const修饰
因为是一个黄色的警告也没怎么去在意,后来又开始写。
static NSString const *broadcastHost = @"255.255.255.255";
[_broadcastSocket sendData :data toHost:broadcastHost port:broadcastPort withTimeout:5000 tag:broadcastTag];
这个方法是第三方库CocoaAsyncSocket的一个方法,警告在toHost这个参数这,应该是又是刚才的那个问题。
点进去发现他是这么用host参数的。
if(host == nil || ([host length] == 0)){
}else if([host isEqualToString:@"localhost"] || [host isEqualToString:@"loopback"]){
}else{
}
后来基本确定这个的问题出在
[host isEqualToString:@"localhost"]
先说解决这个警告的办法,将const与*换位。
static NSString * const raven = @"raven";
这么写,再去试就不会有警告了。
想知道为什么的同学继续往下看。
---------分割线---------
先引入一个关于const的话。
const只修饰其后的变量,至于const放在类型前还是类型后并没有区别。
翻译一下就是
NSString const *raven = @"raven";//const修饰*raven
const NSString *raven = @"raven";//const修饰*raven
NSString *const raven = @"raven";//const修饰raven,即*raven可变,raven不可变
而*raven 与raven的区别,就看看这个吧。指针
网友评论