gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:49:24 25 4
gpt4 key购买 nike

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

关于ios - 无法将接口(interface)类型为 'NSString' 的对象按值传递给可变参数函数;格式字符串的预期类型为 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33979828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com