Class *anObject = [[Class alloc] init];

  1. What does alloc do?
    It allocates a chunk of memory to hold the object and returns the pointer.
    alloc 给对象分配了一块内存,让对象不释放,并且把地址返回给指针。
    光有alloc分配了一块地址是不够的,对象还没有真正被创建。
  2. What does init do?
    init才真正地把对象初始化了,把我们想要得到的对象存放到前面alloc的内存里。
  • init {
    if (self = [super init]) { //初始化父类,比如实例变量等等
    self = ...;
    }
    return self;
    }
  1. About alloc.
    调用完alloc后,内存是直接映射到堆,还是只分配给了虚拟内存?
    申请的这块内存又是多大呢?
  2. 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
  3. 内存之间的关系
    物理内存:物理内存是真实插在板子上的内存,是多大就是多大,看机器配置的时候,看的就是这个内存。所谓升级就是可以外扩内存条。
    虚拟内存层面: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。
    我们的程序很多时候会因为系统的内存不足而被杀死.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容