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