公司动态

JSDebugger 关联对象调试技巧:如何用 JS 动态为任意对象添加属性

📅 2026/8/18 14:29:18
JSDebugger 关联对象调试技巧:如何用 JS 动态为任意对象添加属性
JSDebugger 关联对象调试技巧如何用 JS 动态为任意对象添加属性【免费下载链接】JSDebuggerJavaScript-Based Debugger For Inspecting Running State Of Your Application项目地址: https://gitcode.com/gh_mirrors/js/JSDebugger在 iOS 开发中关联对象Associated Object是 Runtime 提供的强大能力它允许你在不修改类定义的情况下为任意对象动态添加属性。可一旦遇到关联对象相关的问题调试就成了噩梦断点看不到、日志不好打、运行时状态一片模糊。而JSDebugger这款基于 JavaScript 的运行时调试工具恰好提供了优雅的解法——你可以在 JS 环境中直接读写任意对象的关联属性真正实现一行 JS 动态为任意对象添加属性。本文将用最通俗的方式带你掌握 JSDebugger 关联对象调试技巧。什么是关联对象为什么调试它很麻烦关联对象Associated Object是 Objective-C Runtime 提供的机制通过objc_setAssociatedObject和objc_getAssociatedObject两个函数把属性挂到任意对象上无需修改原有类。传统调试痛点具体表现状态不可见关联对象不参与 KVC、不显示在调试器变量区写入繁琐每次都要手写 setter/getter 和 Runtime 调用无法动态操作想在运行期临时改值只能改代码重新编译JSDebugger正是为打破这些限制而生它不需要手动定义JSExport就能让你在 JS 中调用任意 Objective-C 方法、读写任意属性——包括关联对象。JSDebugger 如何让关联对象调试动起来JSDebugger 的核心是JDEngine见 JDEngine.h它在 JS 与 Objective-C 之间建立了一座桥。当你通过 JS 访问一个 OC 实例的属性时底层 JDInstance4JS.m 会先检查该对象是否存在同名关联对象存在就直接返回其值——这正是关联对象能无缝暴露给 JS 的关键。一行 JS 代码读写关联对象在 JSDebugger 中读写关联对象就像操作普通 JS 对象一样简单// 创建对象 var aso TestAssociateObject.alloc().init(); // 动态设置关联对象属性底层自动走 Runtime setter aso.associateInt 5; // 直接读取关联对象的值 var value aso.associateInt;没错就这么简单。设置走的是 Runtime 的objc_setAssociatedObject读取由 JSDebugger 自动帮你完成你完全不需要关心底层细节。关联对象调试完整实战跟着 demo 走一遍项目 Demo 里已经内置了一套完整的关联对象示例强烈建议你 clone 下来边看边练git clone https://gitcode.com/gh_mirrors/js/JSDebugger第一步创建带关联属性的类Demo 中 TestAssociateObject.h 用分类Category声明了一个关联属性interface TestAssociateObject(Associate) property (nonatomic) NSInteger associateInt; end对应的 TestAssociateObject.m 中setter 和 getter 分别使用objc_setAssociatedObject与objc_getAssociatedObject实现这是关联对象的标准写法。第二步在 JS 中动态添加与读取关联对象打开 demo.js关联对象部分的核心代码一目了然var aso TestAssociateObject.alloc().init(); vc.associateObject aso; vc.print(); aso.associateInt 5; // JS 动态添加关联属性 vc.print(); // 打印出 5 var asovalu aso.associateInt; // 直接读取 vc.printNumb_(asovalu);在 ViewController.m 中print方法会打印self.associateObject.associateInt。你可以清晰地看到通过 JS 设置关联对象后OC 侧立刻就能读到新值双向打通调试体验拉满 进阶技巧配合 choose 插件定位任意对象关联对象往往挂在某个不记得名字的实例上此时可以先用choose插件按类名精确扫描堆上所有实例var vc choose(ViewController)[0]; // 找到目标对象 vc.associateObject aso; // 动态挂上关联对象 vc.print(); // 立刻验证choose的实现位于 JDChoose.mm它返回所有匹配类名的实例数组是关联对象调试的黄金搭档。快速接入指南用 Playground 实现热更新调试JSDebugger 内置了Playground 热更新机制改完 JS 保存Command S即可自动重跑脚本配合 JDLocalFileObserver 使用引入头文件并声明属性property (nonatomic, strong) JDLocalFileObserver *fileWatcher;指定 JS 文件路径监听变化后调用[[JDEngine engine] evaluateScriptAtPath:path]不用时记得调用stop停止监听接入方式可参考 Podfile 与 ViewController.m整个流程不到 5 分钟 ⚡总结掌握 JSDebugger 关联对象调试技巧后你将获得三大能力✅ 用 JS 一行代码为任意对象动态添加属性✅ 无需 JSExport、无需改代码运行期实时读写关联状态✅ 配合 choose 插件 Playground 热更新实现所见即所得的调试体验如果调试中遇到关联对象问题不妨打开 JSDebugger让 JavaScript 帮你把运行状态彻底摊开来看。【免费下载链接】JSDebuggerJavaScript-Based Debugger For Inspecting Running State Of Your Application项目地址: https://gitcode.com/gh_mirrors/js/JSDebugger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考