美文网首页
alloc init 和 new

alloc init 和 new

作者: Phaemlo | 来源:发表于2017-08-14 15:41 被阅读0次

alloc:分配内存。init:初始化。

new:代替上面两个函数:分配内存,并且初始化。

上代码

【 Summary 】:

0.  在实际开发中很少会用到new,一般创建对象时我们一般是 [[className alloc]init];

1.  区别只在于alloc分配内存的时候使用了zone它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的内存,提升了程序处理速度。

2.  不推荐使用new:原因是使用new的话,初始化方法被固定死只能使用init,不能调用其他的initXX方法。

3.  采用new方法只能采用默认的init方法完成初始化,采用alloc的方式可以用其他定制的初始化方法。

4.  new方法其实内部调用了init方法,很显然在调用之前还分配了内存

5.  [class_name alloc] init]在alloc的时候调用了allocWithZone分配了内存,而new只是进行了      alloc(这里的alloc是内存分配的意思,不等价于alloc这个方法)。也就是说[class_name alloc] init] 实际上做了两步allocWithZone和init,而new是进行了内存分配,然后init;[class_name alloc] init] 分配的内存会和相关联的对象在内存地址中相靠近,利于内存读取。另外[class_name alloc] init]还可以自定义init方法比如像本文中的initWithHaha:

6.  NSZone原本是用于维护一块用于对象内存分配及释放的内存池的描述信息,进程默认的NSZone是在启动的时候创建并将随后所有的对象均分配在这里,也因此在做了大量的分配及释放对象内存之后,可能会产生很多的内存碎片,在做新的内存分配的时候NSZone会试图去填补这些碎片,即从碎片中找到合适的内存区块以存放新的对象,这个查找的过程是需要时间开销的。所以如果需要在短时间内分配大量对象,则可以创建自己的NSZone,那么在分配对象内存的时候,只需要要当前zone的末尾分配即可,相比于去已经臃肿的default zone去分配这批对象,其耗时是更少的

相关文章

  • alloc init 和 new

    alloc:分配内存。init:初始化。 new:代替上面两个函数:分配内存,并且初始化。 上代码 【 Summa...

  • 单例模式的使用

    new和alloc/init的区别 从_alloc和_zoneAlloc中可以看出,alloc 使用了_zone...

  • alloc init != new

    当我在做环信透传消息封装的时候,遇到了这个问题。 封装的类主要实现两个功能1:body构建,消息的构建,会话的构建...

  • alloc init and new

    1.在实际开发中很少会用到new,一般创建对象咱们看到的全是[[className alloc] init] 但是...

  • alloc init new

    alloc:分配内存。 init:初始化。 new:代替上面两个函数:分配内存,并且初始化。 注意: 1.在实际开...

  • alloc、init; new

    macOS Big Sur11.0.1Xcode 12.4objc4-818.2Apple Open Source...

  • alloc 、init、new详解

    先做两个实验,猜测打印结果:实验1: 打印结果: 实验2: 打印结果: 实际上,将NSString换成其他的类型,...

  • new与alloc、init

    开发中,创建对象时,基本使用[[ClassName alloc] init]方式初始化实例(分配内存并初始化);有...

  • iOS alloc init new

    alloc :开辟内存空间,初始化实例init: 默认的构建函数重载new :相当于[[Class alloc] ...

  • new和alloc/init的区别

    new 和 alloc/init的区别 原文地址:http://aifeng.59123.com/archiver...

网友评论

      本文标题:alloc init 和 new

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