Module: Pod

Defined in:
lib/cocoapods-podgenerate/command.rb,
lib/cocoapods-podgenerate.rb,
lib/cocoapods-podgenerate/benchmark/profiler.rb,
lib/cocoapods-podgenerate/parallel/thread_pool.rb,
lib/cocoapods-podgenerate/patches/project_patch.rb,
lib/cocoapods-podgenerate/patches/analyzer_patch.rb,
lib/cocoapods-podgenerate/patches/installer_patch.rb,
lib/cocoapods-podgenerate/parallel/batch_processor.rb,
lib/cocoapods-podgenerate/patches/cache_analyzer_patch.rb,
lib/cocoapods-podgenerate/patches/project_writer_patch.rb,
lib/cocoapods-podgenerate/patches/user_integrator_patch.rb,
lib/cocoapods-podgenerate/patches/multi_project_generator_patch.rb

Overview

cocoapods-podgenerate

Monkey-patches Pod::Project,将 pod_group 查找从 O(n) 优化为 O(1)。

优化原理:

原始 `pod_group(pod_name)` 每次调用都执行:
  pod_groups.find { |group| group.name == pod_name }
这是 O(n) 的线性扫描(n = pod 数量)。

在项目生成过程中,pod_group 被调用 3-5 次/pod(从
FileReferencesInstaller、PodTargetInstaller 的不同位置调用)。
对于 200+ pod 的项目,这意味着 600-1000 次线性扫描,
每次扫描 200 个元素 → ~120k-200k 次比较。

修复策略:

1. 首次调用 pod_group 时,构建 Hash 缓存(O(n) 一次性成本)
2. 后续调用直接用 cached_hash[pod_name],O(1) 查找
3. 调用 add_pod_group(添加新 pod group)时,清除缓存强制下次重建
4. 使用 `||=` 懒初始化缓存(只有第一次调用时才构建)

线程安全:

所有操作在主线程的 install! 流程中执行,无并发访问。

参考:CocoaPods 源码 — lib/cocoapods/project.rb

Defined Under Namespace

Modules: PodGenerate Classes: Command