Domanda

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

Ok, from this code, I know that now is a pointer to an NSDate object, but on the code at line 3, how can you dereference a pointer without an asterisk? Why don't we do code like this on the 3rd line:

NSLog(@"The date is %@", *now);
È stato utile?

Soluzione 2

%@ takes a pointer to an object and sends it the description message, which returns an NSString pointer. (You can override description in your classes to customize the string.)


Added in response to comment:

In Objective-C, you to send messages to objects via a pointer using the [ objectPointer message ] syntax. So, using your NSDate example, you can do:

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);

Any instance of a class that inherits from NSObject can be sent the description message and thus a pointer to it can be passed to an %@ format parameter.

(Technical note: if the object supports the descriptionWithLocale: message, it will be sent that instead.)

Altri suggerimenti

The %@ format specifier takes a pointer to an object, so there's no need to dereference the pointer in the parameter list. In general, there's no need to dereference pointers to Objective C objects.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top