lookUpImpOrForward 执行流程
objc-runtime-new.mm · 慢速查找路径
Phase 1 · 安全校验与准备 Phase 2 · 继承链递归查找 Phase 3 · 动态方法解析 Phase 4 · 缓存回填与返回 objc_msgSend 快速路径 Miss 类是否已初始化? 设 NOCACHE runtimeLock.lock() · checkIsKnownClass cls 是否有效? 无效/nil returnNil 有效 ↓ 继承链循环(attempts 计数器保护) 本类方法表二分查找 getMethodNoSuper 命中 → done 未命中 父类是否存在?(getSuperclass) nil (到顶) forward_imp 存在 查父类缓存 cache_getImp(curClass) 命中真实 IMP → done 命中 forward_imp break 未命中 attempts-- == 0?(继承链成环?) _objc_fatal 继续向上 LOOKUP_RESOLVER 允许? resolveInstanceMethod / resolveClassMethod 重新查找 否(forward_imp) done: log_and_fill_cache LOOKUP_NOCACHE 未设置时回填缓存 runtimeLock.unlock() return IMP 图例 命中/成功 失败/转发 特殊路径 主流程