nsobject

作者: 如果大雨落下 | 来源:发表于2020-07-06 16:14 被阅读0次

一个NSObject对象占用多少个字节
16个,
NSObject 里面的isa指针占用了8个自字节,malloc库在分配内存的时候,64位的,不足16个字节的,会分配16个字节

@interface student:NSObject
int _no;
int _age;
@end

student 占用16个字节

struct student_Impl {
class *isa; //占用8个字节
int _no; // 每个int占用4个字节
int _age;
}

所以一共占用16个字节

内存对齐选择,实际大小必须要是最大的的变量大小的整数倍
@interface student:NSObject
int _no;
int _age;
Int _avg;
@end
大小是isa 8个,3个int12个,但是由于内存对齐原则,所以是24个
实际分配的大小:是32个,因为手机内存里面的空间不是连续的,都是提前分配好的一个一个的小块,苹果里面最小的块是16.其他都是16的倍数,最大256,所以当需要分配实际大小是24的时候,会直接丢一个32的内存空间出来

isa指针

  • instance的isa指向类对象,类对象的isa指向元类对象,元类对象的isa都指向基类对象
  • isa对象里面存储对象具体的值,类对象里面存储,属性,方法,协议,元类对象里面存储类方法
  • 类对象的superclass指向父类,父类的在指向父类,最后指向基类,基类的指向nil
  • 元类对象的superclass,也是指向父类,但是基类的superclass指向的是基类的类对象
  • 所以查找类方法的时候,如果基类里面没有,会往上继续找,找到基类的类对象,而且方法的查找是通过方法名,不会区分实例方法和类方法,只通过方法名
    类对象跟元类对象的就够是一样的

相关文章

网友评论

      本文标题:nsobject

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