补写父类?
只要是子类改写父类里的方法。就必须首先判断(self = [super 被改写的父类方法名称])的方法是否为真!只有这个判断为真,才能在子类里对父类的方法进行重造。那么问题来了,为什么必须要进行这个判断呢?不是有曾说过吗?子类改写父类的方法根本不需要写任何代码直接就是执行子类里的方法。原因在于当父类与子类有相同的方法时,执行时完全以子类里的方法为主。根本不考虑父类里的这个方法长什么样?那么为什么有时候还要加(self = [super 被改写的父类方法名称])这句话呢?答案就是,子类里的这个方法不是改写父类里的方法,而是在父类方法的基础上继续添加代码。这才是问题的关键,因为我觉得不是父类的方法不好,而是觉得不够完善,所以我想在父类方法的基础上继续添加代码进行完善!于是就用到了(self = [super 被改写的父类方法名称])了。表示在父类的方法里继续添加代码,起一个完善父类方法的作用,而不是全盘否定进而推倒重来!
init方法?
通常来说,init方法的作用不仅仅是分配内存空间的作用,还有一个更大的作用就是在实例化对象开辟内存空间的同时将初始化方法里的输入的参数赋值给实例化的对象的属性。这才是init的改写的第二个好处,直接在实例化对象的时候就已经将被实例化的对象的属性值生成!所以整理一下:重写init方法有两种情况,情况一:为父类里的init方法添加执行代码,这个的意义在于在实例化对象分配内存空间的同时就能够执行的一些代码,通常这些代码就是每实例化一个对象或开辟一次内存空间就会执行一次的代码。情况二:构造一个包含输入参数的init的方法,这种构造的init方法的意义在于直接为对象的属性赋值。这样就可以在直接实例化对象的时候就能够给对象的属性附上值,这样的意义我现在唯一能想到的也就时免去了属性逐个赋值的麻烦。