二十五、继承(八)关键字super 和 重写 dealloc这项措施

现在  我们  已经学会了  如何重写  一项措施。然后  我们  回到  下面这个程序  并且  学习  一种新的方法  来腾空  长方形的位置所占用的内存空间。长方形的位置  在这个程序当中  是  用myRectangle这个物件中所包含的物件location来表示的。

文件XY.h:

文件XY.m:

文件Rectangle.h:

文件Rectangle.m:

文件main.m:

在修改过后的setLocation措施当中,我  专门  为  location这个物件  分配了  内存空间,于是  程序  结束时,我  就必须  将  location这个物件所占用的内存空间  腾空。原本 我  是  这样做的:

除此之外,我  还要腾空  myRectangle这个物件本身所占用的内存空间,就像  这样:

以后  会提到,release这项措施  有时  会将  物件所占用的内存  腾空,有时  却  不会。release这项措施  会对  其实施对象  采取  dealloc这项措施,而  dealloc这项措施  才是  真正  将  物件所占用的内存  腾空的措施。由于  dealloc这项措施  是  从NSObject这类物件中  继承到的,所以  我们  可以对  任何物件  采取  这项措施,因为  任何物件  都属于  NSObject类型,Rectangle这类物件  也  不例外。我们  只需要  在Rectangle.m这个文件当中  加入  新的dealloc措施,就可以取代  原有的继承下来的dealloc措施,就像  这样:

首先  if()语句  检查  location这个物件  是不是  存在,如果  这个物件  存在,就  将  其占用的内存空间  腾空。接着的

这行语句中的super  指的是  dealloc这项措施的实施对象,但是  dealloc这项措施  并不是  适用于Rectangle这类物件的,而是  适用于  NSObject这类物件的。所以  刚刚这行语句  就会采取  未经重写的dealloc措施(也就是  属于NSObject这大类物件的dealloc措施)  来完成  剩余的工作,将  Rectangle这个物件本身所占用的内存空间  腾空。


你可能感兴趣的:(objective-c)