首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iOS 之 OC 对象占用多少内存

iOS 之 OC 对象占用多少内存

作者头像
网罗开发
发布于 2021-01-29 08:41:19
发布于 2021-01-29 08:41:19
1.5K00
代码可运行
举报
文章被收录于专栏:网罗开发网罗开发
运行总次数:0
代码可运行

来源:枫叶无处漂泊

NSObject对象占用多少内存空间

一个NSObject对象都会分配16byte的内存空间,通过源码可以知道:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
size_t instanceSize(size_t extraBytes) {
    size_t size = alignedInstanceSize() + extraBytes;
    // CF requires all objects be at least 16 bytes.
    if (size < 16) size = 16;
    return size;
}

通过代码可以知道,苹果内存分配最小内存字节数为16 bytes.

OC对象实际使用内存空间

根据设备的cpu是64位还是32位的

  • 64位的占用了 8 Bytes
  • 32位的使用了 4 bytes

在64位情况下,OC实例对象成员变量所占的大小,实际上是 8 字节,下面可以通过源码来验证一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import <malloc/malloc.h>
malloc_size((__bridge const void *)obj); 

Obj-C指针所指向的内存的大小,实际上是16 字节

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import <Objc/Runtime>
Class_getInstanceSize([NSObject Class])

size_t class_getInstanceSize(Class cls) {
    if (!cls) return 0;
    return cls->alignedInstanceSize();
}

对象在分配内存空间时,会进行内存对齐,所以在iOS 中,分配内存空间都是16字节的倍数。16字节是苹果设定的内存的最小单位。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网罗开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OC对象实际使用内存空间
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档