# 17、实现description方法

首先`description`方法是定义在`NSObject协议`里的，然后`NSObject`和`NSProxy`俩“根类”都遵循了该协议，并有默认实现：打印类名和内存地址（如：`<Person: 0x7f9a1600600>`）。

* 用`NSLog`+`%@`打印时调用的是`description`方法
* 程序运行打断点时，在调试控制台输入`LLDB`的`po`命令，调用的是`debugDescription`方法

可以实现如下：

```objectivec
- (NSString *)description {
  return [NSString stringWithFormat:@"%@ %@", _firstName, _lastName];
} // Bob Smith
- (NSString *)debugDescription {
  return [NSString stringWithFormat:@"<%@: %p,\" %@ %@\">", [self class], self, _firstName, _lastName];
} // (Person *) $1 = 0x07117fb0 <Person: 0x7117fb0, "Bob Smith">
```

要点：

* 实现`description`方法返回一个有意义的字符串，用以描述该实例
* 若想在调试时打印出更详尽的对象描述信息，则应实现`debugDescription`方法
