Ios 无法传递接口类型为';NSString';按值转换为变量函数;格式字符串的预期类型为';id';
我用X代码写了下面的代码Ios 无法传递接口类型为';NSString';按值转换为变量函数;格式字符串的预期类型为';id';,ios,objective-c,nsstring,Ios,Objective C,Nsstring,我用X代码写了下面的代码 NSString *myString = @"testString"; NSLog(@"*myString = %@", *myString); 我得到了以下错误 无法通过值将接口类型为“NSString”的对象传递给变量函数;格式字符串的预期类型为“id” 有人能告诉我这是什么意思吗?“*myString”代表什么? 我们知道,如果我们像下面这样编写代码,就不会有错误 char testchar = 'f'; char *char1 = &testchar
NSString *myString = @"testString";
NSLog(@"*myString = %@", *myString);
我得到了以下错误
无法通过值将接口类型为“NSString”的对象传递给变量函数;格式字符串的预期类型为“id”
有人能告诉我这是什么意思吗?“*myString”代表什么?
我们知道,如果我们像下面这样编写代码,就不会有错误
char testchar = 'f';
char *char1 = &testchar;
NSLog(@"*char1 = %c",*char1);
为什么NSString不能像这样写
@阿维,谢谢你的解释,本来我想问的是我看到了下面的声明和定义:
NSString const *BNRNextItemValuePrefsKey1 = @"NextItemValue";
根据我的理解,bnNextItemValuePrefskey1是指向常量@“NextItemValue”的指针
但是当我做下面的操作时,没有错误,
BNRNextItemValuePrefsKey1=@“jijijij”;
为什么会发生这种情况,您能解释一下吗?语法
*myString
正在解除对指针的引用myString
。它告诉编译器传递指针指向的内存位置包含的值,而不是传递指针本身的值。该示例给出错误的原因是Objective-C不允许按值传递对象。只允许向对象传递指针。错误消息中对id
的引用指出%@
格式字符串用于打印对象。任何对象的打印内容取决于该对象类型的-description
实现
第二个示例使用指向char
的指针,因为Objective-C在传递char
的值时没有问题
问题编辑
在该语句中,
const
属性指的是指向的值,而不是指针的值。就实现而言,这并不意味着什么,因为该字符串无论如何都是不可更改的。我相信它允许编译器优化。去掉NSLog
行上的*
。我知道,但我想知道“*myString”是什么意思。如果你知道要去掉*
,那么为什么你会在错误使用*
时发布一个关于错误的问题?请参阅问题中我的更新,我感到困惑。