OC中为什么要使用alloc/init而很少使用new

来源:互联网 发布:复方肾炎片价格淘宝 编辑:程序博客网 时间:2024/04/29 06:36


在OC中,新建一个对象可以有两种方式[class_name alloc] init]和[class_name new]那么这两种有什么区别呢,哪一个更好呢

下面我们就来探讨一下

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,


以上是代码段,结果输出如下图


你会发现new方法其实内部调用了init方法,很显然在调用之前还分配了内存

其实这其中还有一个奥秘,[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:。


如果您觉得写的不错给个赞吧,毕竟原创 



1 0