「OC」源码学习——objc_class的bits成员探究

「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 的内容,我们看到内容如下

image-20250427192832522

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

image-20250427194349585

如何获取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的类型输出

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值