Objective-C代码编译成C++代码

  当我们想了解某些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进行简化工作:

  1. 进入终端,键入命令 vim ~/.bash_profile
  2. 在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并保存;
  3. 执行source ~/.bash_profile,执行后方会生效。

  进入项目目录,找到想要编译的文件,执行rewriteoc xxx.m,生成对应的.cpp文件就是我们想要的文件:

执行rewriteoc Person.m
.cpp所在文件夹位置

见证奇迹的时刻~


Person.cpp

tip:编译出的.cpp文件代码很多,可以从底部向上翻阅。