OC对象的本质

2020-11-14  本文已影响0人  Mr_Shaozj

1. 一个NSObject对象占用多少的内存

clang -rewrite-objc main.m -o main.cpp
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main.cpp

2. NSObject的底层定义和实现

struct NSObject_IMPL {
    Class isa;
};
NSobject * objc = [[NSObject alloc] init]
//获取NSObject实例对象中的成员变量占用的内存大小 --> 8字节 isa指针
NSLog(@"objc - %zd",class_getInstanceSize([objc class]));
// 获得obj指针所指向内存的大小 --> 16 内存对齐
NSLog(@"objc - %zd",malloc_size((__bridge const void *)(objc)));
Snip20201115_1.png

3.自定义一个类对象

@interface Person : NSObject{
    NSString * _name;
    NSInteger _age;
}
@end
struct Person_IMPL {
    struct NSObject_IMPL NSObject_IVARS;
    NSString *_name;
    NSInteger _age;
};

struct NSObject_IMPL {
    Class isa;
};
上一篇 下一篇

猜你喜欢

热点阅读