objective-c - "sending ' 常量 NSString * ' to parame

我有常量 NSString,我想这样调用它:

[newString isEqualToString:CONSTANT_STRING];

这里有错误的代码吗?

我收到了这个警告:

sending 'const NSString *' to parameter of type 'NSString *' discards qualifiers

这些应该如何声明?

最佳答案

你应该如下声明你的常量字符串:

NSString * const kSomeConstantString = @""; // constant pointer

代替:

const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";

前者是一个指向NSString对象的常量指针,而后者是一个指向常量NSString对象的指针。

使用 NSString * const 可以防止您重新分配 kSomeConstantString 以指向不同的 NSString 对象。

isEqualToString: 方法需要 NSString * 类型的参数。如果你传递一个指向常量字符串的指针 (const NSString *),你传递的东西与它预期的不同。

此外,NSString 对象已经是不可变的,所以将它们设为 const NSString 是没有意义的。

关于objective-c - "sending ' 常量 NSString * ' to parameter of type ' NSString * ' discards qualifiers"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828831/

相关文章:

objective-c - 对 Objective-C 代码进行单元测试的最佳方法是什么?

objective-c - 如何按比例缩放 UIImageView?

ios - 何时使用 NSInteger 与 int

objective-c - 我的 Objective-C 单例应该是什么样的?

objective-c - 使用 alloc init 而不是 new

ios - 在 Objective-C 中使用 GCD 的 dispatch_once 创建单例

objective-c - 在不使用私有(private) API 的情况下获取当前的第一响应者

objective-c - Xcode 的隐藏功能

ios - 如何在 Swift 中发出 HTTP 请求?

ios - 将 NSURL 转换为 NSString