Я переопределяю метод описания объекта. Мне нужно знать, как напечатать адрес памяти объекта, чтобы заменить {???} в приведенном ниже коде:
-(NSString *) description {
return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@",
{???}, self.parameterOne, self.paramterTwo];
}
Я хочу напечатать его в консоли вот так:
<SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages
objective-c
nslog
Undistraction
источник
источник
[NSString stringWithFormat:@"%@ parameterOne:...", [super description], ...];
- адрес попадает туда, потомуNSObject
что он имеет, но вы также не выбрасываете ничего, что, по вашему мнению, имеет отношение к отладке в любых суперклассах, от которых вы можете наследовать.%p
ожидает указатель типаvoid *
, к которому необходимо выполнитьself
обратное приведениеvoid *
, иначе возникает неопределенное поведение.void *
иid
внутренне почти одинаковы, и в этом случае нет никакой разницы, на что вы его бросаетеvoid *
или нет.Самый простой способ - использовать суперописание
Таким образом, в случае этого объекта модели, который является подклассом NSObject, вы можете избежать лишней работы и запомнить
%p
.Вручную с помощью NSStringWithClass () и% p
Таким образом, в случае объектной модели, в которой у вас есть конкретный исполнитель, производный от этого класса, вы покажете правильное имя класса.
источник