NSLog адрес памяти объекта в методе переопределенного описания
Я переопределяю метод описания объекта. Мне нужно знать, как напечатать адрес памяти объекта, чтобы заменить {???} в коде ниже:
-(NSString *) description {
return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@",
{???}, self.parameterOne, self.paramterTwo];
}
Я хочу, чтобы он печатался в консоли следующим образом:
<SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages
Ответы
Ответ 1
Чтобы напечатать адрес, используйте спецификатор формата %p
и собственный указатель:
-(NSString *) description {
return [NSString stringWithFormat:@"<SomeClass: %p>\nparmeterOne: %@\nparameterTwo: %@",
self, self.parameterOne, self.paramterTwo];
}
Ответ 2
Самый простой способ - использовать супер описание
- (NSString *)description
{
return [NSString stringWithFormat:@"%@ Area: %@, %@", [super description], self.identifier, self.name];
}
Итак, в случае этого объекта модели, который является подклассом NSObject, вы можете уклониться от дополнительной работы и вспомнить %p
.
Ручное использование NSStringWithClass() и% p
- (NSString *)description
{
return [NSString stringWithFormat:@"<%@: %p> Area: %@, %@", NSStringFromClass([self class]), self, self.identifier, self.name];
}
Итак, в случае объектной модели, в которой у вас есть конкретный исполнитель, который получен из этого класса, вы увидите правильное имя класса.