美文网首页
OC对象的本质

OC对象的本质

作者: Mr_Shaozj | 来源:发表于2020-11-14 19:13 被阅读0次

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;
};

相关文章

网友评论

      本文标题:OC对象的本质

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