无法将接口类型为 'NSString' 的对象按值传递给可变参数函数;格式字符串的预期类型是 'id'

Cannot pass object with interface type 'NSString' by value to variadic function; expected type from format string was 'id'

我在X-Code中写了如下代码,

NSString  *myString = @"testString";
NSLog(@"*myString = %@", *myString);

我收到以下错误,

Cannot pass object with interface type 'NSString' by value to variadic function; expected type from format string was 'id'

谁能告诉我这是什么意思? “*myString”代表什么? 我们知道,如果我们像下面这样写代码,就没有错误,

char testchar = 'f';
char *char1 = &testchar;
NSLog(@"*char1 = %c",*char1);

为什么NSString不能这样写?

@Avi,谢谢你的解释,原来我想问的是我看到了下面的声明和定义:

NSString const *BNRNextItemValuePrefsKey1 = @"NextItemValue";

根据我的理解 BNRNextItemValuePrefsKey1 指向常量的指针@"NextItemValue" 但是当我执行以下操作时,没有错误, BNRNextItemValuePrefsKey1 = @"jijijij"; 为什么会这样,你能解释一下吗?

语法 *myString 正在取消引用指针 myString。它告诉编译器传递指针指向的内存位置中包含的值,而不是传递指针本身的值。该示例给您错误的原因是 Objective-C 不允许按值传递对象。您只能将指针传递给对象。错误消息中对 id 的引用指出 %@ 格式字符串用于打印对象。为任何对象打印的确切内容取决于该对象类型的 - description 的实现。

你的第二个例子带有指向 char 的指针,因为 Objective-C 没有传递 char.

的值的问题

问题编辑

在该语句中,const 属性指的是指向的值,而不是指针的值。在实现方面,它并没有多大意义,因为该字符串无论如何都不会改变。我相信它允许编译器优化。