- What does alloc do?
It allocates a chunk of memory to hold the object and returns the pointer.
alloc 给对象分配了一块内存,让对象不释放,并且把地址返回给指针。
光有alloc分配了一块地址是不够的,对象还没有真正被创建。 - What does init do?
init才真正地把对象初始化了,把我们想要得到的对象存放到前面alloc的内存里。
- init {
if (self = [super init]) { //初始化父类,比如实例变量等等
self = ...;
}
return self;
}
- About alloc.
调用完alloc后,内存是直接映射到堆,还是只分配给了虚拟内存?
申请的这块内存又是多大呢? - About memory.
iOS里的内存被分为:clean memory and dirty memory
Clean memory:可以被操作系统回收,在闪存中有备份,可以再次读取,主要包括 system framework,binary executable of your app, memory mapped files,code(代码段)
Dirty memory:不可以被操作系统回收,所有非clean memory,包括 heap allocation(包括被分配了的堆空间), cashes, decompressed images,image cash - 内存之间的关系
物理内存:物理内存是真实插在板子上的内存,是多大就是多大,看机器配置的时候,看的就是这个内存。所谓升级就是可以外扩内存条。
虚拟内存层面:virtual memory = clean memory dirty memory.
物理内存层面:resident memory = dirty memory clean memory that loaded in physical memory.
总结:virtual memory == (clean memory dirty memory) > resident memory > dirty memory。
我们的程序很多时候会因为系统的内存不足而被杀死.