先写一个 Person
类:
@interface Person : NSObject
@property (nonatomic, copy) NSString *p_name;
@property (nonatomic, assign)
int
p_age;
- (void)p_instanceMethod1;
@end
@implementation Person
- (void)p_instanceMethod1{
NSLog(@"%s",__func__);
}
@end
使用 clang
编译器, clang -rewrite-objc Person.m -o Person.cpp
将 Person.m
编译成 Person.cpp
文件,部分代码如下:
/// 1: Person 类型的底层结构
struct
NSObject_IMPL {
Class isa;
};
struct
Person_IMPL {
struct
NSObject_IMPL NSObject_IVARS;
int
_p_age;
NSString * _Nonnull _p_name;
};
/// 2: p_name 属性的底层结构
// get
static
NSString * _Nonnull _I_Person_p_name(Person * self, SEL _cmd) {
return
(*(NSString * _Nonnull *)((char
*)self + OBJC_IVAR_$_Person$_p_name)); }
extern
"C"
__declspec(dllimport)
void
objc_setProperty (id, SEL,
long, id,
bool,
bool);
// set
static
void
_I_Person_setP_name_(Person * self, SEL _cmd, NSString * _Nonnull p_name) { objc_setProperty (self, _cmd, __OFFSETOFIVAR__(struct
Person, _p_name), (id)p_name, 0, 1); }
/// 3: p_age 类型的底层结构
// get
static
int
_I_Person_p_age(Person * self, SEL _cmd) {
return
(*(int
*)((char
*)self + OBJC_IVAR_$_Person$_p_age)); }
// set
static
void
_I_Person_setP_age_(Person * self, SEL _cmd,
int
p_age) { (*(int
*)((char
*)self + OBJC_IVAR_$_Person$_p_age)) = p_age; }
/// 4: p_instanceMethod1 方法的底层结构
static
void
_I_Person_p_instanceMethod1(Person * self, SEL _cmd) {
NSLog((NSString *)&__NSConstantStringImpl__var_folders_86_0y_j3bzj65z6vw6hy1chw_4m0000gp_T_Person_f010c0_mi_0,__func__);
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。