1. 用到的软硬件
- Macbook Air
- macOS Mojave 10.14.6
- Xcode 11.3.1
- Object-C(编程语言)
2. 新建一个项目
3. 问题 & 假设 & 验证
- 任意一个空类占用的内存都相同吗?
- 一个类占用的内存会根据你的成员属性多少增加吗?
- iOS会优化我们的内存结构吗?
任意一个空类占用的内存都相同吗?
这里我们用NSObject和UIViewContrller来做对比,很明显是不一样的
NSObject应该分配内存大小:8 - 实际分配内存大小:16
UIViewContrller应该分配内存大小:848 - 实际分配内存大小:848
一个类占用的内存会根据你的成员属性多少增加吗?
这里在我们创建好的NSObject.h中添加2个成员属性,所以很显然是会增加的。
@property(nonatomic,strong)NSString *name;
@property(nonatomic,strong)NSString *hobbit;
NSObject应该分配内存大小:24 - 实际分配内存大小:32
iOS会优化我们的内存结构吗
前提,我们要知道在苹果设备内存地址中,以最大8bit为大小来储存数据,首先我们在我们的NSObject代码和ViewController中分别加上如下代码,这里可以看出我们的18和180两个int为4字节的合并成一个8字节的单元储存起来,由此可见,我们的iOS会优化我们的系统内存。
@property(nonatomic,strong)NSString *name;
@property(nonatomic,assign)int age;
@property(nonatomic,assign)int height;
Person *p = [[Person alloc] init];
p.name = @"小黑";
p.age = 18;
p.height = 180;
(lldb) x/4xg p
0x600001796240: 0x000000010f0c17a0 0x000000b400000012
0x600001796250: 0x000000010f0bf020 0x0000000000000000
(lldb) po 0x000000010f0bf020
小黑
(lldb) po 0x000000b400000012
773094113298
(lldb) po 0x000000b4
180
(lldb) po 0x0000012
18
网友评论