Objective c 定义常量并将其作为参数传递会导致;从指针目标类型中丢弃限定符;

Objective c 定义常量并将其作为参数传递会导致;从指针目标类型中丢弃限定符;,objective-c,cocoa,Objective C,Cocoa,这在论坛上被问了很多次,但我需要澄清这背后的概念。我正在声明一个const NSString*key=@“SomeConstValue”;并将其传递给接受NSString指针类型的方法。但是,它会导致一些警告“从指针目标类型丢弃限定符”。这是什么意思?我该如何创建一个常量并将其传递给此方法 在您描述的情况下,您将丢弃“const”限定符(将const NSString*传递给需要NSString*的方法) NSString始终是不可变的,因此可以安全地将常量声明为“NSString*”。 如果要

这在论坛上被问了很多次,但我需要澄清这背后的概念。我正在声明一个const NSString*key=@“SomeConstValue”;并将其传递给接受NSString指针类型的方法。但是,它会导致一些警告“从指针目标类型丢弃限定符”。这是什么意思?我该如何创建一个常量并将其传递给此方法

在您描述的情况下,您将丢弃“const”限定符(将const NSString*传递给需要NSString*的方法)

NSString始终是不可变的,因此可以安全地将常量声明为“NSString*”。
如果要在为变量赋值时触发编译器警告,请将其声明为“NSString*const”。

感谢您的回复diciu。我的目的是使恒定的不可更改的思想成为.m文件。如果您熟悉java,我正在寻找objective c中的公共静态最终等价物。请使用“NSString*const”。这就是苹果用来声明字符串常量的方法。(例如NSView.h:APPKIT_EXTERN NSString*const nsfullscreensmodeallscreens;)const NSString*与NSString*const不同。这是指向常量NSString的指针和指向NSString的常量指针之间的区别。@Dilshan:你一定做错了什么
NSString*const
在将其作为参数传递时不会生成警告,因为这意味着指针不会更改,字符串的内容不会更改。由于参数是按值传递的,所以会复制指针,这样就不会有更改的危险。Dilshan:
const NSString*
NSString const*
相同;也许你就是这么想的。正确的类型是
NSString*const
;指针后面有
const
关键字,
const
关键字应用于变量(这就是您想要的原因),而不是变量中的指针(这就是为什么编译器认为它非常重要,足以警告隐式丢弃)。我重新标记了它,因为它似乎与Objective-C++本身无关,也与运行时无关。