Zastępuję metodę opisu obiektu. Muszę wiedzieć, jak wydrukować adres pamięci obiektu, aby zastąpić {???} w poniższym kodzie:
-(NSString *) description {
return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@",
{???}, self.parameterOne, self.paramterTwo];
}
Chcę, żeby to wydrukowało w konsoli w ten sposób:
<SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages
objective-c
nslog
Nieuwaga
źródło
źródło
[NSString stringWithFormat:@"%@ parameterOne:...", [super description], ...];
- adres trafia tam, ponieważNSObject
go ma, ale nie wyrzucasz też niczego, co zdecydowałeś, że jest istotne dla debugowania w jakichkolwiek nadklasach, z których możesz dziedziczyć.%p
oczekuje wskaźnika typuvoid *
, do którego należy rzutować zself
powrotemvoid *
, w przeciwnym razie wystąpi niezdefiniowane zachowanie.void *
iid
są wewnętrznie prawie takie same, aw tym przypadku nie ma różnicy, czy rzucisz,void *
czy nie.Najłatwiejszą metodą jest użycie super opisu
Więc w przypadku tego obiektu modelu, który jest podklasą NSObject, możesz uniknąć dodatkowej pracy i zapamiętywania
%p
.Ręcznie przy użyciu NSStringWithClass () i% p
Więc w przypadku modelu obiektowego, w którym masz konkretną implementację, która pochodzi z tej klasy, pokażesz poprawną nazwę klasy.
źródło