init和new

由于通过alloc出来的是一个对象,所以在调用init时执行的是init的对象方法

通过alloc底层源码知道了init内部调用了_objc_rootInit,然后直接将obj作为id类型返回了,这其实就是一个工厂设计模式,方便子类来重写,并构造出自己需要的对象类型。

通过案例可验证new其实就等价于allocinit,通过newalloc加init创建的name属性的值相同。

通过汇编发现new在底层调用了符号objc_opt_new,而在objc源码中在objc_opt_new的实现里发现其实就是同时调用了callAlloc也就是alloc的底层实现逻辑,再调用了init,这也验证了new其实就相当于同时调用allocinit

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容