美文网首页iOS 进阶IOS开发ios
Sending 'const NSString *__s

Sending 'const NSString *__s

作者: Raven_zwu | 来源:发表于2016-02-16 17:31 被阅读2967次
    • 本文章仅为个人实践,个人思考,个人总结,仅供参考,如有错误纯属正常,欢迎指出。

    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 *__s

      本文链接:https://www.haomeiwen.com/subject/ifipkttx.html