Objective-C 头文件展开

Objective-C 头文件展开

在 Objective-C 中, 头文件展开是在预处理阶段处理的, 如果项目头文件过多以及头文件写法不规范, 经常产生各种问题, 比如想找某个头文件是在哪里被导入的, 搜索代码基本搞不定, 比如我想找 ComHelper.h 是在哪里被引入的, 需要先展开头文件

1
通过 XCode 菜单栏的 Product 选项,依次点击Perform Action 、Preprocess “XXX.m”

先搜索第一个 ComHelper.h

1
2
3
4
5
6
# 12 "/Path/To/Proj/.../DownLoadTask.h" 2

# 1 "/Path/To/Proj/.../ComHelper+Coupling.h" 1

# 1 "/Path/To/Proj/.../ComHelper.h" 1
# 10 "/Path/To/Proj/.../ComHelper.h"

说明是被 DownLoadTask.h 引进来的, 继续找第一个 DownLoadTask.h
找到如下

1
2
3
4
5
6
7
8
#pragma clang module import Foundation /* clang -E: implicit import for #import <Foundation/Foundation.h> */
# 1 "/Path/To/Proj/.../ImageDownloadTask.h" 1
# 11 "/Path/To/Proj/.../ImageDownloadTask.h"
#pragma clang module import Foundation /* clang -E: implicit import for #import <Foundation/Foundation.h> */
# 1 "/Path/To/Proj/.../HttpDownLoadTask.h" 1


# 1 "/Path/To/Proj/.../DownLoadTask.h" 1

继续找第一个 ImageDownloadTask.h
省略后续…. 依次找到 ImageManager.h ListBase.h CloudFolder.h UserSession.h SongInfo.h StatInfo.h

即引用顺序是

  1. StatInfo.h
  2. SongInfo.h
  3. UserSession.h
  4. CloudFolder.h
  5. ListBase.h
  6. ImageManager.h
  7. ImageDownloadTask.h
  8. DownLoadTask.h
  9. ComHelper.h

经过这样九层 import 才最终展开到 ComHelper.h 的头文件

上述步骤都是固定的, 简单写个脚本就能快速定位.

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道