OC对象的本质
2020-11-14 本文已影响0人
Mr_Shaozj
1. 一个NSObject对象占用多少的内存
- 将OC代码转化为C++代码
clang -rewrite-objc main.m -o main.cpp
- 指定平台和系统架构 32位或者是64位, arm7 arm64
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;
};