「OC」源码学习——objc_class的bits成员探究
类模版
@interface GGObject : NSObject
{
int _sum;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *hobby;
@property (nonatomic, assign) int age;
@property (nonatomic, assign) double height;
@property (nonatomic, assign) short number;
- (void)speak;
- (void)sayHello;
+ (void)walk;
@end
@implementation GGObject
- (void)speak {
NSLog(@"%s", __func__);
}
+ (void)walk {
NSLog(@"%s", __func__);
}
-(void) sayHello {
NSLog(@"%s", __func__);
}
@end
objc_class的成员变量
在全局搜索搜索objc_class 的内容,我们看到内容如下

类本身自带的isa指针为八字节;其中superclass为class类型本质为isa指针,大小也为八字节;cache_t结构体的内容得在lldb之中进行分析,查看cache_t的结构体数据,使用p sizeof(cache_t)可以看到,cache_t的内存为16字节,结合我们前面所计算的,那么我们不难得出。只要我们在objc_class的首地址加上32字节就可以得到bits之中的信息

如何获取bits
既然已经知道平移32位就能获取bits的相关信息,那在lldb里面就不难操作了,我们进入class_data_bits_t的声明,看到data()方法
class_rw_t* data() const {
return (class_rw_t *)(bits & FAST_DATA_MASK);
}
大致意思是,将bit的内容转化为class_rw_t的类型输出

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



