正文
平常在使用Xcode断点调试问题时,po可能是最常用到的LLVM命令了。
通过po命令,我们可以在Xcode的LLDB控制台打印对象的描述,系统在运行时会提供一个默认值,如图:

我们可以通过重写func debugDescription()达到我们希望在po的时候返回预期的返回值。

po的底层逻辑实现:

事实上打印对象有三种方法,po只是其中一种。
第二种方式是p。
p和po的区别在于,p不会随着func debugDescription()方法修改而且改变打印的值。

但是p和po,遵循swift的语法,在下面的例子中,是无法打印的。

同样下面的代码也会报错:
let student : Person = Student(name:"john")
print(student.name) //这里是会报错的
p的底层逻辑实现:

第三种方式是通过v打印。
v同样不会不会随着func debugDescription()方法修改而且改变打印的值。
而且v有自己的语法,不需要通过编译,而是进行动态类型解析,但是它无法执行代码。

v的底层逻辑实现:

总结
| po | p | v | |
|---|---|---|---|
| 显示对象的方式 | 通过对象描述方法打印 | 通过格式化打印 | 通过格式化打印 |
| 计算结果的方式 | 通过编译表达,可以完整访问编程语言 | 通过编译表达,可以完整访问编程语言 | 有自己的语法、解释和表达,解释过程中会多次动态类型解析 |
参考链接
请保持转载后文章内容的完整,以及文章出处。本人保留所有版权相关权利。