[objective-c] 재정의 된 설명 메서드에서 개체의 메모리 주소를 NSLog

객체의 설명 방법을 재정의하고 있습니다. 아래 코드에서 {???} 를 대체하기 위해 객체의 메모리 주소를 인쇄하는 방법을 알고 싶습니다 .

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

다음과 같이 콘솔에 인쇄하고 싶습니다.

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



답변

주소를 인쇄하려면 %p형식 지정자와 자체 포인터를 사용하십시오.

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


답변

가장 쉬운 방법은 슈퍼 설명을 사용하는 것입니다.

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

따라서이 클래스에서 파생 된 구체적인 구현자가있는 객체 모델의 경우 올바른 클래스 이름을 표시합니다.


답변