美文网首页
alloc 和 init都做了什么

alloc 和 init都做了什么

作者: 写代码的小农民 | 来源:发表于2019-04-25 23:37 被阅读0次

虚拟内存和物理内存
clean memory
在闪存中有备份,能再次读取重建。如:
Code(代码段),framework,memory-mapped files
dirty memory 如:
被分配了的堆空间,image cache

NSString *str1 = [NSString stringWithString:@"Welcome!"];// 1.
NSString *str2 = @"Welcome"; // 2.
char *buf = malloc(100 * 1024 * 1024); // 3.分配100M内存给buf
for (int i = 0; i < 3 * 1024 * 1024; ++i) {
buf[i] = rand();
} // 4.buf的前3M内存被赋值

1、直接分配到堆上 有程序员手动释放
2、常量字符串 ,分配到只读数据段。如果这块内存被释放了,而我们又访问他的时候,系统可以在只读数据段里把值再读出来重建这块内存,所以这种方法创建的string没有引用计数。
3、C语言的alloc系统会分配100M虚拟内存给buf,分配的区域是clean memory。直到使用的时候才会映射到物理内存上。
如果是[Person alloc]这个时候会直接映射到物理内存上。

对象的大小要看成员变量是什么类型的
*isa 是8个字节 + string 8个字节 + int 4个字节 但是对象分配内存大小的时候会字节补齐成16个字节 ,所以对象的大小只会是16的倍数

[Person alloc] 会在堆上分配一块内存,并把内存地址返还给对象的isa指针。
但是如果要使用这个对象 一定要init 只有init初始化之后这个对象才能够使用。
就像操作系统就是政府,alloc就是去争地,init就是在地上修房子。没有调用init,房子都没有修好,别人怎么买房进去住?所以我们需要用init来初始化这片内存。

相关文章

  • iOS- alloc init new

    开发中天天都需要创建对象,可是初始化的时候为什么需要alloc init呢?alloc,init 对应又做了什么呢...

  • alloc流程图

    问题:alloc 做了什么init做了什么new 做了什么alloc 是怎么开辟内存空间的 调用alloc流程图 ...

  • alloc 和 init都做了什么

    虚拟内存和物理内存clean memory在闪存中有备份,能再次读取重建。如:Code(代码段),framewor...

  • alloc 流程分析

    一、分析之前 alloc 到底做了什么事? init 有什么用? [[Class alloc] init] 与 n...

  • 【iOS底层原理】alloc和init做了什么?

    调用一个类的alloc和init创建一个类的实例对象 那么alloc和init底层究竟做了什么? 打印结果是什么?...

  • oc对象探索 alloc&init

    初步探索 alloc 和 init 要知道alloc 和 init 都干了什么事情 我们从内存地址和指针地址来分析...

  • alloc&init 探索

    alloc&init 探索 首先要明确alloc做了什么,init做了什么。 上方的p1/p2/p3经打印是一模一...

  • oc底层探索-alloc

    oc底层探索-alloc 在oc中,创建对象经常用 那么alloc 和init究竟做了什么呢 首先在 https:...

  • alloc、allocWithZone、new

    [[Class alloc] init]其实是做了两件事,alloc和init是两个方法,class调用了两个方法...

  • iOS-alloc底层做了什么流程分析

    引言 当我们创建一个对象的时候 比如: [[Person alloc] init] alloc 到底做了什么 i...

网友评论

      本文标题:alloc 和 init都做了什么

      本文链接:https://www.haomeiwen.com/subject/totxnqtx.html