一个NSObject对象占内存多少? 如何计算出来?

在iOS的面试中,有一道经典的题目,NSObject对象占内存多少?很多人能回答个大概,但是对于内部的实现或者这道题的升级就有些含糊了,我们今天来升级下这道题目,然后基于此看下底层的源代码是如何实现的

题目

NSObject *obj = [[NSObject alloc] init];
NSLog(@"class_getInstanceSize = %zd", class_getInstanceSize([NSObject class]));
NSLog(@"malloc_size = %zd", malloc_size((__bridge const void *)(obj)));
NSLog(@"sizeOf = %zd", sizeof(obj));

这三行分别打印多少呢?

如果定义一个类,其新增了其他的属性,那么打印是多少呢?

@interface LFFStudent : NSObject

@property (nonatomic, copy) NSString *name;

@end

LFFStudent *s = [LFFStudent new];
NSLog(@"class_getInstanceSize = %zd", class_getInstanceSize([LFFStudent class]));
NSLog(@"malloc_size = %zd", malloc_size((__bridge const void *)(s)));
NSLog(@"sizeOf = %zd", sizeof(s));

答案

我是答案分割线

第一个问题的打印是:

class_getInstanceSize = 8
malloc_size = 16
sizeOf = 8

第二个问题的打印是:

class_getInstanceSize = 16
malloc_size = 16
sizeOf = 8

接下来,我们就分别看下这三个方法的内部实现

class_getInstanceSize

首先找到class_getInstanceSize的定义:

//返回类的实例的大小
/** 
 * Returns the size of instances of a class.
 * 
 * @param cls A class object.
 * 
 * @return The size in bytes of instances of the class \e cls, or \c 0 if \e cls is \c Nil.
 */
OBJC_EXPORT size_t
class_getInstanceSize(Class _Nullable cls) 
    OBJC_AVAILABLE(10.5, 2.0, 9.0, 1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值