当我们想了解某些Objective-C代码的实现原理时,就会想到在终端使用clang命令可以将OC代码通过runtime机制转成C++代码。如:clang -rewrite-objc main.m
,但一般都会遇到如下错误:
In file included from ViewController.m:9:
**./ViewController.h:9:9: ****fatal error: ****'UIKit/UIKit.h' file not found**
#import <UIKit/UIKit.h>
** ^**
1 error generated.
查阅资料后了解到该问题可以通过如下方法解决:
clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxxxx.m
为了以后方便使用,我们可以通过alias进行简化工作:
- 进入终端,键入命令
vim ~/.bash_profile
; - 在vim界面输入i进入编辑编辑状态并且键入:
alias rewriteoc='clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk'
键入完毕,点esc退出编辑状态,再键入:wq
退出vim并保存; - 执行
source ~/.bash_profile
,执行后方会生效。
进入项目目录,找到想要编译的文件,执行rewriteoc xxx.m
,生成对应的.cpp文件就是我们想要的文件:
见证奇迹的时刻~
tip:编译出的.cpp文件代码很多,可以从底部向上翻阅。