Estou substituindo o método de descrição de um objeto. Preciso saber como imprimir o endereço de memória do objeto para substituir {???} no código abaixo:
-(NSString *) description {
return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@",
{???}, self.parameterOne, self.paramterTwo];
}
Quero imprimir no console assim:
<SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages
objective-c
nslog
Undistraction
fonte
fonte
[NSString stringWithFormat:@"%@ parameterOne:...", [super description], ...];
- o endereço acaba lá porque oNSObject
tem, mas você também não joga fora nada que você decidiu ser relevante para depuração em quaisquer superclasses das quais você possa estar herdando.%p
espera um ponteiro do tipovoid *
, para o qual você deve lançar deself
voltavoid *
, caso contrário, ocorrerá um comportamento indefinido.void *
eid
internamente são quase os mesmos e, neste caso, não há diferença se você conjuravoid *
ou não.O método mais fácil é usar a super descrição
Portanto, no caso deste objeto modelo que é uma subclasse de NSObject, você pode evitar trabalho extra e lembrança
%p
.Usando manualmente NSStringWithClass () e% p
Portanto, no caso de um modelo de objeto no qual você tem um implementador concreto derivado desta classe, você mostrará o nome de classe correto.
fonte