NSLog адрес памяти объекта в переопределенном методе описания - PullRequest
115 голосов
/ 26 сентября 2011

Я переопределяю метод описания объекта. Мне нужно знать, как напечатать адрес памяти объекта, чтобы заменить {???} в коде ниже:

-(NSString *) description {
    return [NSString stringWithFormat:@"<SomeClass: %@>\nparmeterOne: %@\nparameterTwo: %@",
            {???}, self.parameterOne, self.paramterTwo];
}

Я хочу, чтобы он печатался в консоли следующим образом:

<SomeClass: 0x4c05600> parameterOne: 12 parameterTwo: sausages

Ответы [ 2 ]

210 голосов
/ 26 сентября 2011

Для печати адреса используйте %p спецификатор формата и сам указатель:

-(NSString *) description {
    return [NSString stringWithFormat:@"<SomeClass: %p>\nparmeterOne: %@\nparameterTwo: %@",
            self, self.parameterOne, self.paramterTwo];
}
6 голосов
/ 10 декабря 2013

Самый простой способ - использовать супер описание

- (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];
}

Так что в случае объектной модели, в которой у вас есть конкретный реализатор, производный от этого класса, вы увидите правильное имя класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...