Sending 'const NSString *__strong' to parameter of type 'NSString *' discards qualifiers 警告

  • 本文章仅为个人实践,个人思考,个人总结,仅供参考,如有错误纯属正常,欢迎指出。

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的区别,就看看这个吧。指针

你可能感兴趣的:(Sending 'const NSString *__strong' to parameter of type 'NSString *' discards qualifiers 警告)