在Objective-C中引用一个指针
发布时间:2020-12-16 05:21:58 所属栏目:百科 来源:网络整理
导读:任何人都可以解释一下,为什么我们不会将一个指针“now”取消引用到NSDate实例,当我们实际想要从这个实例获取数据而不是地址时. NSDate *now = [NSDate date];NSLog(@"The date is %@",now); 我很困惑的事实是,以前的Aaron Hillegass“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中,我们一直处理对象的指针,因为指针是最简单的方法来引用它们.需要取消引用指针(查看字节)的唯一需要是运行时系统,例如当将消息选择器转换为函数地址以执行它们时.您的代码只将指针视为指针,并将其传递,而不用担心另一端的数据的精确布局(字节). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |