无法将接口类型为 '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
属性指的是指向的值,而不是指针的值。在实现方面,它并没有多大意义,因为该字符串无论如何都不会改变。我相信它允许编译器优化。
我在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
属性指的是指向的值,而不是指针的值。在实现方面,它并没有多大意义,因为该字符串无论如何都不会改变。我相信它允许编译器优化。