我在X-Code中编写了以下代码,
NSString *myString = @"testString";
NSLog(@"*myString = %@", *myString);
我收到了以下错误,
无法通过值将接口类型为“NSString”的对象传递给variadic函数;格式字符串的预期类型是'id'
有人可以告诉我这是什么意思吗? “* myString”代表什么? 我们知道,如果我们编写如下代码,则没有错误,
char testchar = 'f';
char *char1 = &testchar;
NSLog(@"*char1 = %c",*char1);
为什么NSString不能像这种情况一样写?
@ Avi,感谢您的解释,原来,我想问的是我看到了以下声明和定义:
NSString const *BNRNextItemValuePrefsKey1 = @"NextItemValue";
从我的理解BNRNextItemValuePrefsKey1指向常量@“NextItemValue”的指针 但是当我执行以下操作时,没有错误, BNRNextItemValuePrefsKey1 = @“jijijij”; 为什么会这样,你能解释一下吗?
答案 0 :(得分:0)
语法*myString
取消引用指针myString
。它告诉编译器传递指针指向的内存位置包含的值,而不是传递指针本身的值。示例为您提供错误的原因是因为Objective-C不允许按值传递对象。您只能传递指向对象的指针。错误消息中对id
的引用指出%@
格式字符串用于打印对象。确切地说,为任何对象打印的内容取决于- description
对该对象类型的实现。
指向char
指针的第二个示例有效,因为Objective-C在传递char
的值方面没有问题。
问题编辑
在该语句中,const
属性引用指向的值,而不是指针的值。在实现方面,它并没有多大意义,因为该字符串无论如何都不会改变。我相信它允许编译器优化。