Ich überschreibe die Beschreibungsmethode eines Objekts. Ich muss wissen, wie die Speicheradresse des Objekts gedruckt wird, um {???} im folgenden Code zu ersetzen :
-(NSString *) description {
return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@",
{???}, self.parameterOne, self.paramterTwo];
}
Ich möchte, dass es wie folgt in der Konsole gedruckt wird:
<SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages
objective-c
nslog
Ablenkung
quelle
quelle
[NSString stringWithFormat:@"%@ parameterOne:...", [super description], ...];
- die Adresse landet dort, weilNSObject
sie es hat, aber Sie werfen auch nichts weg, von dem Sie entschieden haben, dass es für das Debuggen in Superklassen relevant ist, von denen Sie möglicherweise erben.%p
Erwartet einen Zeiger vom Typvoid *
, auf den Sieself
zurückgreifen müssenvoid *
, da sonst undefiniertes Verhalten auftritt.void *
undid
sind intern fast gleich, und in diesem Fall gibt es keinen Unterschied, ob Sie es werfenvoid *
oder nicht.Die einfachste Methode ist die Verwendung der Super-Beschreibung
Bei diesem Modellobjekt, das eine Unterklasse von NSObject ist, können Sie zusätzlicher Arbeit und Erinnerung ausweichen
%p
.Manuelles Verwenden von NSStringWithClass () und% p
Bei einem Objektmodell, in dem Sie einen konkreten Implementierer haben, der von dieser Klasse abgeleitet ist, wird der richtige Klassenname angezeigt.
quelle