注意区别:
// constant pointer
char * const str = "";
// pointer to constant (two equivalent ways)
const char * str = "";
char const * str = "";
关键字 const 适用于紧靠其左侧的任何内容。如果它的左边没有任何东西,它适用于它右边的任何东西。
在 Objective-C 中,所有方法参数总是按值传递。这包括原语、结构、联合和指针,以及任何其他组成的类型。
请注意,您不能拥有 object 类型的变量。像这样的表达式NSObject o;
会产生编译器错误,并显示消息“无法静态分配接口类型”。
传递对象的唯一方法是传递指针。指针作为值传递,但让方法内的代码引用对象并更改它。所以在某种程度上,就好像你通过引用传递对象(实际上你是通过值传递指针)。
在编译 Objective-C 程序时,方法被转换为 C 函数,并且每个“消息发送”(也称为“方法调用”,虽然并不完全相同)都使用运行时函数运行objc_sendMsg
。这个函数不知道也不关心你是否对对象进行了限定const
。如果您想要一个不可变对象,则必须在对象内部编写该不可变性代码。例子:
// const qualifying an object is ignored whether in variables or method arguments:
const NSMutableArray *array = [NSMutableArray new]; // const is ignored
-(void)someMethod:(const NSMutableArray *)array { ... // const is ignored
// calling the methods that mutate the object works fine
[array removeAllObjects];