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";

你可能感兴趣的:(assigning to ‘NSString *_strong’ from ‘const NSString’ discards qualifiers)