objc->cpp的对应关系。

通过clang可以方便地把objc的语法转成cpp:
clang -rewrite-objc xxx.m
所以可以很方便的看到objc与cpp之间的对应关系。
最近主要工作在符号混淆上,但是踩到了有关selector和runtime的混淆的坑。

NSClassFromString:

id obj = [[NSClassFromString(@"MyClass") alloc] init];
id obj = ((id (*)(id, SEL))(void *)objc_msgSend)((id)((id (*)(id, SEL))(void *)objc_msgSend)((id)NSClassFromString((NSString *)&__NSConstantStringImpl__var_folders_92_dfj9jsb51kj3lh2zssbw0dzm0000gn_T_1_38e0f0_mi_0), sel_registerName("alloc")), sel_registerName("init"));

NSStringFromClass:

NSString *obj = NSStringFromClass([MyClass class]);
NSString *obj = NSStringFromClass(((Class (*)(id, SEL))(void *)objc_msgSend)((id)objc_getClass("MyClass"), sel_registerName("class")));

Selector:

SEL sel = @selector(mySelector);
SEL sel = sel_registerName("mySelector");

评论

此博客中的热门博文

使__attribute__((annotate("xxx")))能作用于OC函数

viewWillAppear不执行的解决办法

iOS中使用xpc/xpc.h