gpt4 book ai didi

objective-c - 在 Objective-C 中取消引用指针

转载 作者:太空狗 更新时间:2023-10-30 03:27:56 25 4
gpt4 key购买 nike

谁能解释为什么我们不“现在”取消引用指向 NSDate 实例的指针,而我们实际上想从该实例获取数据,而不是地址。

NSDate *now = [NSDate date];
NSLog(@"The date is %@", now);

我感到困惑的事实是,Aaron Hillegas 的“Objective-C Programming”一书中的 NSLog 使用示例是:

NSDate *now = [NSDate date];
NSLog(@"The new date lives at %p", now);

这段代码很清楚。我们想要地址,我们知道了。但是,当我们继续使用指针时,如何仅通过更改说明符来获取实际日期呢?

最佳答案

“实际日期”是一个概念。 “数据”是一系列字节。它们不是一回事。

如果你使用老式的 C 风格字符串和 printf,你会这样写:

char *name = "Zakatov";
printf("My name is %s", name);

这是因为 printf 函数需要事物的地址才能与其一起工作。您不是在传递“实际数据”,而是在传递地址,因为传递地址的效率更高。将某些内容传递给函数意味着将其值复制到内存的堆栈区域,复制地址(32 或 64 位)比复制整个字符串(几个字节,或者可能是 KB 或 MB)要快得多。

所以在 Objective-C 中我们一直在处理指向对象的指针,因为指针是引用它们的最简单方法。唯一需要取消引用指针(查看字节)的是运行时系统,例如,当它将消息选择器转换为函数地址以执行它们时。您的代码只是将指针视为指针,并将其四处传递,而无需担心另一端数据(字节)的精确布局。

关于objective-c - 在 Objective-C 中取消引用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705303/

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