前言
在初学 OC 开发时,对这段代码 if(self = [super init])
不甚理解,书上和网上说的是:若要初始化子类就必须初始化父类,但是为什么呢?让我们来一探究竟。
摘录
父类进行初始化时,用的是子类对象指针 self
,父类的 init
方法有可能对这个指针指向的内存区作了大的变更。
有可能把这个指针所指的内存释放了,重新分配了另一块内存区域返回来,这时这个返回的指针与原来的指针是指向不同地址的
所以父类初始化后要重新返回指针。父类返回的和子类的 self
的类型都为 id
类型(通用类型)。
父类的 init
方法若返回的指针与 self
不一样,在父类的 init
方法中已作了 release
和新的内存分配,不需要自己再去 release self
,直接用父类 init
方法返回的指针就可以了。
引用:https://segmentfault.com/a/1190000006738897
本文由 Bill 创作。
最后编辑时间为: 2019.04.11 at 02:02 pm