web-dev-qa-db-ja.com

NSLogオブジェクトのメモリアドレスをオーバーライドされた記述メソッドで

オブジェクトの記述メソッドをオーバーライドしています。次のコードで{???}を置き換えるオブジェクトのメモリアドレスを出力する方法を知る必要があります。

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

コンソールで次のように印刷したい:

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

住所を印刷するには、%pフォーマット指定子とセルフポインター:

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

最も簡単な方法は、スーパーディスクリプションを使用することです

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

そのため、このクラスから派生した具体的な実装者がいるオブジェクトモデルの場合、正しいクラス名が表示されます。