use*_*658 9 pointers objective-c dereference ios
NSDate *now = [NSDate date];
NSLog(@"This NSDate object lives at %p", now);
NSLog(@"The date is %@", now);
Run Code Online (Sandbox Code Playgroud)
好的,从这段代码中,我知道这now是一个指向NSDate对象的指针,但是在第3行的代码中,如何在没有星号的情况下取消引用指针?为什么我们不在第3行做这样的代码:
NSLog(@"The date is %@", *now);
Run Code Online (Sandbox Code Playgroud)
%@获取指向对象的指针并向其发送description消息,该消息返回NSString指针.(您可以description在类中重写以自定义字符串.)
添加以回应评论:
在Objective-C中,您可以使用[ objectPointer message ]语法通过指针向对象发送消息.因此,使用您的NSDate示例,您可以:
NSDate * now = [NSDate date];
NSString * dateDescription = [now description]; // Note that "now" points to an object and this line sends it the "description" message
NSLog(dateDescription);
Run Code Online (Sandbox Code Playgroud)
可以向description消息发送任何继承自NSObject的类的实例,因此可以将指向它的指针传递给%@format参数.
(技术说明:如果对象支持该descriptionWithLocale:消息,则会发送该消息.)