web-dev-qa-db-fra.com

NSLog l'adresse mémoire d'un objet dans la méthode de description remplacée

Je remplace la méthode de description d'un objet. J'ai besoin de savoir comment imprimer l'adresse mémoire de l'objet pour remplacer {???} dans le code ci-dessous:

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

Je veux qu'il soit imprimé dans la console comme ceci:

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

Pour imprimer l'adresse, utilisez %p spécificateur de format et pointeur libre:

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

La méthode la plus simple consiste à utiliser la super description

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@ Area: %@, %@", [super description], self.identifier, self.name];
}

Ainsi, dans le cas de cet objet modèle qui est une sous-classe de NSObject, vous pouvez éviter les travaux supplémentaires et vous rappeler %p.

Utiliser manuellement NSStringWithClass () et% p

- (NSString *)description
{
    return [NSString stringWithFormat:@"<%@: %p> Area: %@, %@", NSStringFromClass([self class]), self, self.identifier, self.name];
}

Ainsi, dans le cas d'un modèle objet dans lequel vous avez un implémenteur concret dérivé de cette classe, vous afficherez le nom correct de la classe.

6