由于通过alloc
出来的是一个对象,所以在调用init
时执行的是init
的对象方法
通过alloc
底层源码知道了init
内部调用了_objc_rootInit
,然后直接将obj
作为id
类型返回了,这其实就是一个工厂设计模式,方便子类来重写,并构造出自己需要的对象类型。
通过案例可验证new
其实就等价于alloc
加init
,通过new
和alloc加init
创建的name
属性的值相同。
通过汇编发现new
在底层调用了符号objc_opt_new
,而在objc
源码中在objc_opt_new
的实现里发现其实就是同时调用了callAlloc
也就是alloc
的底层实现逻辑,再调用了init
,这也验证了new
其实就相当于同时调用alloc
和init
。