Swift中如何为对象的属性设置监视点?
搞定Swift中对象属性的监视点设置问题
哈哈,我之前也踩过一模一样的坑!你一开始找错监视目标啦——给整个数组设监视点当然不会触发中断,因为你真正关心的是数组内对象的某个属性变化,而数组本身的内存(比如长度、存储指针)根本没动,调试器自然不会理你。下面给你两种实用的解决方法:
方法一:用LLDB命令手动设置(灵活,调试时临时加很方便)
假设你的对象是User类,要监视的属性是score,数组里的第3个元素(下标2)是你重点关注的对象,直接在LLDB控制台敲这条命令就行:
watchpoint set variable myUserArray[2].score
要是你的对象是引用类型(class),哪怕它在数组里的位置变了(比如数组新增元素导致下标移位),只要这个对象实例没被替换,这个监视点就会一直生效,属性一变化就触发中断。
如果要盯数组里所有对象的这个属性,你可以遍历数组逐个设置,但这种情况用下面的可视化方式会更省心。
方法二:Xcode可视化界面设置(直观,新手友好)
- 先把程序运行到能访问到目标数组的断点位置
- 在Xcode左侧的
Variables View里找到你的数组,展开找到要监视的对象 - 右键点击目标属性,选择
Watch "属性名"(比如Watch "score") - 之后只要这个属性的值一改,调试器立刻就会中断,你还能在断点导航栏里看到这个监视点的状态
几个关键提醒
- 如果你监视的是值类型(比如struct)的属性,那当数组里的元素被替换时,原来的监视点会失效——因为值类型是复制存储的,原来的实例已经不存在了。这种情况建议要么在属性的setter里手动加断点,要么结合数组的修改事件来处理。
- 彻底放弃给整个数组设监视点的想法吧!数组的监视点只会在数组本身的结构变化(比如新增/删除元素导致存储扩容、指针变更)时触发,完全覆盖不到你要的对象属性变化场景。
内容的提问来源于stack exchange,提问作者user1807157
相关产品推荐
相关产品推荐

