美文网首页
【iOS底层原理】一个NSObject对象占用多少内存

【iOS底层原理】一个NSObject对象占用多少内存

作者: codeJ | 来源:发表于2021-06-22 17:43 被阅读0次

一个NSObject对象,转成c++以后里面就是一个结构体,里面就一个isa的指针。

struct NSObject_IMP{
    Class isa;
}

所以一个NSObject对象占用的内存也就是成员变量isa所占用的内存,8个字节。但是系统会分配16个字节给它。

获取类的实例对象的size方法
#import <objc/message.h>
NSLog(@"%zd",class_getInstanceSize([NSObject class]));
获取系统给一个对象分配的内存空间
#import <malloc/malloc.h>
NSLog(@"%zd",malloc_size((__bridge const void *)obj));
eg
@interface Person : NSObject
{
    @public
    int _age; //4
    int _height; //4
    float _height2; //4
}

@property(nonatomic, copy) NSString *age2; //8

@end

@implementation Person

@end

一个Person对象占用多少内存

    Person *p = [[Person alloc] init];
    p->_age = 1;
    p->_height = 1;
    p->_height2 = 1;
    [p setAge2:@"2"];
    NSLog(@"%zd",class_getInstanceSize([Person class]));
    NSLog(@"%zd",malloc_size((__bridge const void *)p));

isa:8
_age:4
_height:4
_height2:4
age2:8
class_getInstanceSize:8(isa)+8(_age+_height)+8(_height2)+8(age2) = 32
malloc_size: 32
注意:分配内存空间有内存对其原则
输出:32 32
eg2
@interface Person2 : NSObject
{
    @public
    int _age; //4
    int _height; //4
    float _height2; //4
}
@end

@implementation Person2

@end

一个Person2对象占用多少内存

    Person2 *p = [[Person2 alloc] init];
    p->_age = 1;
    p->_height = 1;
    p->_height2 = 1;
    NSLog(@"%zd",class_getInstanceSize([Person2 class]));
    NSLog(@"%zd",malloc_size((__bridge const void *)p));

isa:8
_age:4
_height:4
_height2:4
class_getInstanceSize:8(isa)+8(_age+_height)+8(_height2)= 24
malloc_size: 32
注意:分配内存空间有内存对其原则
输出:24 32
eg3
@interface Person3 : NSObject
{
    @public
    int _age; //4
    int _height; //4
}
@end

@implementation Person3

@end

一个Person3对象占用多少内存

    Person3 *p = [[Person3 alloc] init];
    p->_age = 1;
    p->_height = 1;
    NSLog(@"%zd",class_getInstanceSize([Person3 class]));
    NSLog(@"%zd",malloc_size((__bridge const void *)p));

isa:8
_age:4
_height:4
_height2:4
class_getInstanceSize:8(isa)+8(_age+_height) = 16
malloc_size: 16
注意:分配内存空间有内存对其原则
输出:16 16

相关文章

  • 探寻OC对象的本质

    iOS底层原理总结 - 探寻OC对象的本质 面试题:一个NSObject对象占用多少内存? 探寻OC对象的本质,我...

  • iOS底层原理-OC对象的本质

    面试题:一个NSObject对象占用多少内存? 作为一个iOS开发人员来说,iOS底层原理是必须要掌握的知识。虽然...

  • iOS底层面试题---OC语法部分

    面试题的答案都是抛砖引玉,具体细节还得深入了解iOS底层原理复制代码 1、一个NSObject对象占用多少内存? ...

  • iOS底层面试题---OC语法部分

    面试题的答案都是抛砖引玉,具体细节还得深入了解iOS底层原理 1、一个NSObject对象占用多少内存? 系统分配...

  • 面试题1:NSObject 对象占用内存、isa/supercl

    注:分析步骤参考 MJ底层原理班 内容,本着自己复习方便原则而记录 1 一个NSObject对象占用多少内存? 系...

  • OC对象的本质

    一个NSObject对象占用多少内存? 由这个问题可以引出更多底层的东西。在这里要搞清楚NSObject对象在内存...

  • iOS底层--NSObject对象占用多少内存

    我们平时所编写的Object-C代码,底层实现都是C/C++代码, 所以OC的面向对象都是基于C/C++的数据结构...

  • 探寻OC对象的本质

    本文主要通过三个问题,一起探寻一下OC对象实现的底层原理。 一个NSObject对象占用多少内存? Objecti...

  • iOS-浅谈OC对象的本质

    目录 Objective-C的本质NSObject的底层实现一个NSObject对象的底层内存分布情况内存占用查看...

  • iOS底层-OC对象的本质

    经过对小码哥底层原理视频学习,通过以下面试题来分析oc对象的本质 1.一个NSObject对象占用多少内存? 我们...

网友评论

      本文标题:【iOS底层原理】一个NSObject对象占用多少内存

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