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