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的类信息存放在哪里?
对象方法、属性、成员变量、协议信息存储在类对象中。
类方法存储在元类对象中。
实例对象成员变量的值存储在实例对象中。
网友评论