场景
想要看OC底层实现时,可使用命令行工具将OC代码还原成C++源码查看底层实现。
内容
命令
xcrun -sdk iphonesimulator clang -arch x86_64 -rewrite-objc main.m
注意点
如果导入自己编写文件的头文件与当前main.m文件不是同一文件夹下时,需要将路径补全才可使用。
其他
分类的作用
- 添加类方法
- 添加实例方法
- 覆盖主类的方法
分类的方法调用
- 主类与分类方法重复,调用的是分类方法。
- 分类之间方法重复,看编译时加载顺序。
上次为同事提供工具类,结果发现在他们那里报错。排查之后发现是因为工具类之间有重名方法导致我这里和其他人那里效果不一致问题。
缺憾
- 分类添加的@property属性,系统只会生成变量,不会生成get/set方法,想要使用只能自己手动实现。
C++文件
属性列表
- OC文件中使用
@interface JX_Person (Explore)
@property (nonatomic, assign) int age;
@property (nonatomic, copy) NSString *name;
@end
- 解析C++文件后内容
static struct /*_prop_list_t*/ {
unsigned int entsize; // sizeof(struct _prop_t)
unsigned int count_of_properties;
struct _prop_t prop_list[2];
} _OBJC_$_PROP_LIST_JX_Person_$_Explore __attribute__ ((used, section ("__DATA,__objc_const")