本文通过参照 MABlockClosure 的实现和 Aspects 的 API 设计,基于 libffi 实现了对 Objective-C Block 的 hook。GitHub 地址:https://github.com/yulingtianxia/BlockHook

什么场景下需要 hook block 呢?在有源码的情况下,大部分程序员会选择直接在 block 中插代码。假如方法 A 的入参是个 block 对象,方法 A 将 block 传给方法 B,C…等。如果只有方法 A 的源码,上层传入的 block 和下层方法实现都是黑盒的话,想追踪 block 调用的时机,打印些 log,就得 hook 这个 block 对象了。

Read More

绝不仅仅是一篇 WWDC 2017 Session 411 学习笔记。除了有关 LLVM 9.0 的新特性之外,还有关于静态分析器和 Clang 5 Objective-C ARC 的一点看法和经验。

我觉得 LLVM 9 的亮点如下:

  1. 支持 Objective-C API 可用性检查
  2. 新增一些对隐患代码的静态分析检查和 warning
  3. 更快的 LTO,使其可以真正使用

Read More

机器学习和计算机视觉在 iOS 上虽然早已有了系统级的支持,但 WWDC 17 发布的 iOS 11 将它们的使用门槛大大降低。苹果提供了设计合理且容易上手的 API,让那些对基础理论知识一窍不通的门外汉也能玩转高大上的前沿科技,这是苹果一贯的风格。

Read More

最近一个月从零开始自学了下有关 iOS 上的机器学习相关知识,亲身实践了从数据采集到训练模型再到移动端预测的流程。理论知识学习路径为:机器学习->深度学习->迁移学习;实践框架学习路径为:TensorFlow->Keras->MPS(iOS 10)。最终完成一个简单的手势图像五分类问题,并预测 iOS 摄像头采集的图片。最终结果,训练集准确率 96.26%,交叉验证集准确率 73.86%。

Read More