OC 中 alloc/init 到底比new好在了哪里
2019-01-25 本文已影响0人
再好一点点
使用oc语言开发的时候创建一个对象一般像这样[className alloc] init],很少使用[className new],那么这两种方式哪一种更好呢?
先看几张高清无码图
在person类里边定义两个方法,一个重写父类的,一个自定义
![](https://img.haomeiwen.com/i3265625/06aec13d00760434.png)
在控制器中分别使用这几种方式创建person对象
![](https://img.haomeiwen.com/i3265625/0324450ab5370d1e.png)
接下来看结果
![](https://img.haomeiwen.com/i3265625/37c9d89bdd0e5b77.png)
是不是很神奇,[Person new]其实内部也调用了init方法,它是在开辟了内存以后调用的init.
而[Person alloc] init]在alloc的时候调其实是调用了allocWithZone分配了内存,然后在调用init
也就是说[Person alloc] init] 实际上做了两步allocWithZone和init,而new是进行了内存分配,然后调用init;使用alloc的优点就是alloc分配的内存会和相关联的对象在内存地址中相靠近,利于内存读取。
另外[Person alloc] init]还可以比较灵活的自定义init方法,例如本文中的initWithName:。