美文网首页
Runtime0-NSObject底层

Runtime0-NSObject底层

作者: Jean_Lina | 来源:发表于2020-09-16 14:26 被阅读0次

1 一个NSObject对象占用多少内存。
一个 NSObject对象都会分配 16byte 的内存空间。
但是实际上在 64位 下,只使用了 8byte
在32位下,只使用了 4byte
一个 NSObject 实例对象成员变量所占的大小,实际上是 8 字节
系统分配了16个字节给NSObject对象(通过malloc_size函数获得)对象在分配内存空间时,会进行内存对齐,所以在 iOS 中,分配内存空间都是 16字节 的倍数
但NSObject对象内部只使用了8个字节的空间(通过class_getInstanceSize函数获得)

@interface Student : NSObject {
    @public
    int _no;
    int _age;
}
@end

底层转换:
struct Student_IMPL {
    struct NSObject_IMPL NSObject_IVARS;
    int _no;
    int _age;
};
 struct NSObject_IMPL {
     Class isa;
 };

2 对象的isa指针指向哪里?
实例对象的isa指向class类对象
类对象的isa指向meta-class元类对象
元类对象的isa指向NSObject基类的元类对象
NSObject基类元类对象的isa指向自己。

3 OC的类信息存放在哪里?
对象方法、属性、成员变量、协议信息存储在类对象中。
类方法存储在元类对象中。
实例对象成员变量的值存储在实例对象中。

相关文章

网友评论

      本文标题:Runtime0-NSObject底层

      本文链接:https://www.haomeiwen.com/subject/doocyktx.html