理解 if(self = [super init])
in 技术 with 0 comment

理解 if(self = [super init])

in 技术 with 0 comment

前言

在初学 OC 开发时,对这段代码 if(self = [super init]) 不甚理解,书上和网上说的是:若要初始化子类就必须初始化父类,但是为什么呢?让我们来一探究竟。

摘录

父类进行初始化时,用的是子类对象指针 self,父类的 init 方法有可能对这个指针指向的内存区作了大的变更。

有可能把这个指针所指的内存释放了,重新分配了另一块内存区域返回来,这时这个返回的指针与原来的指针是指向不同地址的

所以父类初始化后要重新返回指针。父类返回的和子类的 self 的类型都为 id 类型(通用类型)。

父类的 init 方法若返回的指针与 self 不一样,在父类的 init 方法中已作了 release 和新的内存分配,不需要自己再去 release self,直接用父类 init 方法返回的指针就可以了。

引用:https://segmentfault.com/a/1190000006738897

Responses