NSObject占用多少内存
NSObject底层接口是
struct NSObject_IMPL{
Class isa
}
1:一个指针占用8个字节,struct存在内存对齐所分配的内存是占用最大字节的倍数,所以系统会至少分配16个字节
2:成员只占用8个字节
3:获取内存的 malloc_size()(实际分配内存)/object_getInstanceSize()(成员占用内存)
Class底层结构
struct objc_class *Class
struct objc_class : objc_object{
Class superClass;
cache_t cache;
class_data_bits_t bits;
class_rw_t *data() const {
return bits.data();
}
}
struct class_data_bits_t {
public:
class_rw_t* data() const {
return (class_rw_t *)(bits & FAST_DATA_MASK);
}
}
struct class_rw_t {
uint32_t flags;
uint16_t version;
uint16_t witness;
const class_ro_t *ro;
method_array_t methods;
property_array_t properties;
protocol_array_t protocols;
};
struct class_ro_t {
uint32_t flags;
uint32_t instanceStart;
uint32_t instanceSize;
#ifdef __LP64__
uint32_t reserved;
#endif
const uint8_t * ivarLayout;
const char * name;
method_list_t * baseMethodList;
protocol_list_t * baseProtocols;
const ivar_list_t * ivars;
};
cache_t 缓存方法,实现是一个散列表
结构
struct cache_t{
struct bucket_t *buckets();
mask_t mask();
mask_t occupied();
}
struct bucket_t{
SEL sel;
IMP imp;
}