You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 01:03:01