assigning to ‘NSString *_strong’ from ‘const NSString’ discards qualifiers

最近在看Effective oc 2.0这本书。对于预处理命令有一个建议:使用static const代替#define。
然后今天遇到一个问题:

static const NSString *appSchemeAlipay = @"iOShuixiangni";
NSString *str = appSchemeAlipay;

这样使用是有问题的,提示警告就是标题。
而书上使用的是NSTimeInterval这个变量。
这个问题的解释就是:把const类型的字符串作为参数传到非const类型参数的方法中去了。
在stackoverflow的处理是:
You should declare your constant string as follows:
NSString * const kSomeConstantString = @""; // constant pointer
instead of:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
前者是指向NSString对象的常量指针,后者是指向常量NSString对象的指针。
使用 NSString * const防止您重新分配kSomeConstantString以指向不同的NSString对象。
赋值需要一个NSString *类型的参数。如果你传递一个指向常量字符串(const NSString *)的指针,你传递的东西不同于预期。
最后处理结果:

static NSString *const appSchemeAlipay = @"iOShuixiangni";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,628评论 1 51
  • 307、setValue:forKey和setObject:forKey的区别是什么? 答:1, setObjec...
    AlanGe阅读 1,704评论 0 1
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,992评论 0 9
  • 人类社会发展至今已经穷尽人的力量,接下来的人工智能时代,其实是非人的时代,我们被自己发明的技术载体赶下食物链的神坛...
    大作家老祝阅读 593评论 2 4
  • “攻城!”柯世勋元帅手一挥,无数身影,朝着前方的孤城冲去! 苍穹下,只有漫天的尘土,黑压压的洪流,数千铁甲军压成了...
    荆芥草阅读 354评论 1 3

友情链接更多精彩内容