行业资讯

BlockHook 是什么?一篇文章带你认识这款强大的 Objective-C Block AOP 工具

发布时间:2026/8/18 17:55:55
BlockHook 是什么?一篇文章带你认识这款强大的 Objective-C Block AOP 工具 BlockHook 是什么一篇文章带你认识这款强大的 Objective-C Block AOP 工具【免费下载链接】BlockHookHook Objective-C blocks. A powerful AOP tool.项目地址: https://gitcode.com/gh_mirrors/bl/BlockHook在 iOS 与 macOS 开发中AOP面向切面编程一直是解耦业务、提升代码复用率的利器。提到 Objective-C 的 Hook很多人第一反应是 Method Swizzling但说到对 Block 的拦截却很少有工具能给出优雅的答案。BlockHook 正是一款专为 Block 打造的 Objective-C Block AOP 工具它基于 libffi 实现无需修改源码即可在 Block 执行前、执行中、执行后注入自定义逻辑甚至能在 Block 被释放时收到通知帮你完整追踪 Block 的生命周期。 BlockHook 能做什么4 种 Hook 模式一次讲清BlockHook 的核心能力围绕四种 Hook 模式展开它们通过位掩码自由组合可以覆盖 Block 生命周期的每一个关键节点模式作用典型场景Before在原实现执行前插入代码埋点、日志、参数检查Instead完全替换原实现拦截重写、修改返回值After在原实现执行后插入代码结果统计、状态上报Dead在 Block 释放时回调内存监控、生命周期追踪更强大的是你可以在 Hook 回调中读取和修改 Block 的参数与返回值也可以随时调用原始实现这让它几乎能胜任所有 Block 相关的动态编程需求。 为什么选择 BlockHook它有哪些过人之处相比自行实现 Block 拦截或使用其他方案BlockHook 的优势非常明显✅上手简单API 设计借鉴了知名的 Aspects 库一个方法即可完成 Hook✅功能全面支持 Before / Instead / After / Dead 四种模式还提供参数与返回值修改能力✅随时撤销Hook 可以随时移除BHToken对象自管理无需担心内存问题✅类型友好支持自定义结构体等复杂类型测试用例中甚至包含结构体返回值修改的验证✅平台完善同时支持 iOS、macOS、tvOS兼容 CocoaPods 与 Carthage 两种集成方式 BlockHook 快速上手一段代码看懂核心用法BlockHook 的使用非常简单核心入口只有一个分类方法block_hookWithMode:usingBlock:。下面这段代码演示了最基础的用法int(^block)(int x, int y) ^int(int x, int y) { return x y; }; // 注册 HookBefore After 模式 BHToken *token [block block_hookWithMode:BlockHookModeBefore | BlockHookModeAfter usingBlock:^(BHInvocation *invocation, int x, int y) { if (invocation.mode BlockHookModeBefore) { NSLog(Block 即将执行); } else { NSLog(Block 执行完成); } }]; int ret block(3, 5); // 原逻辑照常运行Hook 在前后生效 [token remove]; // 随时移除 Hook恢复原样可以看到Hook 回调的第一个参数永远是BHInvocation后续参数与 Block 本身保持一致。想要查看更完整的示例包括修改返回值、拦截器用法等可以参考项目中的测试文件BlockHookSampleTests/BlockHookSampleTests.m。 BlockHook 核心 API 速览BHToken 与 BHInvocation理解这两个核心类你就能掌握 BlockHook 的全部精髓BHTokenHook 令牌mode当前 Hook 的模式组合remove移除该 Hook立即恢复原始行为userInfo携带自定义信息的字典多个 Token 之间通过next形成 Hook 链表可遍历查看BHInvocation调用上下文invokeOriginalBlock调用 Block 的原始实现getArgument:atIndex:/setArgument:atIndex:读写参数getReturnValue:/setReturnValue:读写返回值retainArguments手动保留参数与返回值上述类的定义分别位于BlockHook/BHToken.h与BlockHook/BHInvocation.h公开接口统一由BlockHook/BlockHook.h导出结构非常清晰。 BlockHook 安装方法三种方式任你选方式一CocoaPods 集成推荐在你的Podfile中添加一行然后执行pod install即可pod BlockHook方式二Carthage 集成在Cartfile中声明依赖运行carthage update后将生成的BlockHook.framework拖入工程即可。方式三手动集成通过git clone https://gitcode.com/gh_mirrors/bl/BlockHook获取源码导入libffi.xcframework后把BlockHook/目录下的BlockHook.h/m两个文件加入项目即可。项目还自带了BlockHookSample iOS、BlockHookSample macOS、BlockHookSample tvOS三个演示工程clone 下来可以直接运行体验。 BlockHook 典型应用场景盘点登录拦截路由跳转前用block_interceptor:拦截回调先完成登录再继续执行数据埋点在 Before / After 模式中统计用户行为不改动业务代码性能监控记录 Block 执行耗时定位卡顿热点动态改参在 Instead 模式中替换参数或返回值实现灰度开关、故障降级内存排查通过 Dead 模式感知 Block 释放时机辅助定位循环引用 写在最后BlockHook 把对 Objective-C Block 的 Hook 能力做到了极致API 简洁、模式丰富、平台覆盖广还提供了完整的测试与示例代码。无论你是想为项目引入 AOP 能力还是单纯对 Block 底层实现感兴趣这款 Objective-C Block AOP 工具都值得一试。结合 libffi 的底层能力它甚至能让你深入理解 Block 的调用机制堪称学习与实战两相宜的开源佳作。【免费下载链接】BlockHookHook Objective-C blocks. A powerful AOP tool.项目地址: https://gitcode.com/gh_mirrors/bl/BlockHook创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考