“发送const NSString *'到'NSString *'types的参数会丢弃qualifiers”警告
我有常量NSString,我想调用像:
[newString isEqualToString:CONSTANT_STRING];
这里有错误的代码吗?
我得到了这个警告:
向'NSString *'types的参数发送'const NSString *'会丢弃限定符
应如何申报?
你应该声明你的常量string如下:
NSString * const kSomeConstantString = @""; // constant pointer
代替:
const NSString * kSomeConstantString = @""; // pointer to constant // equivalent to NSString const * kSomeConstantString = @"";
前者是一个指向NSString
对象的常量指针,而后者是指向常量NSString
对象的指针。
使用NSString * const
可以防止您重新指定kSomeConstantString指向不同的NSString
对象。
方法isEqualToString:
需要一个NSString *
types的参数。 如果你将一个指针传递给一个常量string( const NSString *
),那么你传递的是与预期不同的东西。
此外, NSString
对象已经是不可变的,所以使它们成为const NSString
是没有意义的。
只是把所有在一个地方发现在各种职位上的stackoverflow和为我工作,#定义是坏的,因为你不能从variablestypes中受益,基本上编译器replace所有发生时编译(只要你需要导入Constants.h):
// Constants.h #import <Foundation/Foundation.h> @interface Constants : NSObject extern NSString *APP_STATE_LOGGED_IN; extern NSString *APP_STATE_LOGGED_OUT; @end // Constants.m #import <Foundation/Foundation.h> #import "Constants.h" @implementation Constants NSString *APP_STATE_LOGGED_IN = @"APP_STATE_LOGGED_IN"; NSString *APP_STATE_LOGGED_OUT = @"APP_STATE_LOGGED_OUT"; @end
请花几分钟时间阅读本文。 指针地狱常数,反之亦然。