Xcode LLDB是否支持在Swift中监听Objective-C类定义的属性?
可行监听方案
1. LLDB手动监听方案
由于frame是计算属性,需要监听其底层依赖的存储字段:
- 第一步:在LLDB中获取视图对应CALayer的内存地址:
p/x self.scrollContainer.layer
会输出类似(CALayer *) $0 = 0x0000000105b0c290的结果
- 第二步:监听layer中对应存储字段,比如监听宽度变化:
watch set var -w write ((CALayer *)0x0000000105b0c290)->bounds.size.width
如果要监听位置变化,可以监听position.x/position.y字段,变动时会自动触发断点。
2. 代码层面监听方案
- 重写
layoutSubviews:在你的MailSendContainerView子类中重写该方法,所有frame相关的变动都会触发该方法调用,可直接在此处加断点或者打印日志:
override func layoutSubviews() { super.layoutSubviews() print("当前frame: \(frame)") // 此处加断点即可监听所有frame变动 }
- KVO监听:对视图的bounds属性添加KVO监听(frame变动本质会触发bounds或position变动):
private var kvoToken: NSKeyValueObservation? // 在合适的初始化位置添加监听 kvoToken = scrollContainer.observe(\.bounds, options: [.new]) { view, change in guard let newBounds = change.newValue else { return } print("新的bounds: \(newBounds),对应frame: \(view.frame)") }
- Xcode可视化监听:打开Xcode的视图调试器,右键选中你要监听的
MailSendContainerView,选择Watch View's Frame,Xcode会自动配置监听断点,无需手动敲命令。
内容的提问来源于stack exchange,提问作者Tentomon
相关产品推荐
相关产品推荐

