在Objective-C中引用一个指针

前端之家收集整理的这篇文章主要介绍了在Objective-C中引用一个指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
任何人都可以解释一下,为什么我们不会将一个指针“now”取消引用到NSDate实例,当我们实际想要从这个实例获取数据而不是地址时.
NSDate *now = [NSDate date];
NSLog(@"The date is %@",now);

我很困惑的事实是,以前的Aaron Hillegass“Objective-C编程”书中使用的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中,我们一直处理对象的指针,因为指针是最简单的方法来引用它们.需要取消引用指针(查看字节)的唯一需要是运行时系统,例如当将消息选择器转换为函数地址以执行它们时.您的代码只将指针视为指针,并将其传递,而不用担心另一端的数据的精确布局(字节).

猜你在找的C&C++相关文章