现在 我们 已经学会了 如何重写 一项措施。然后 我们 回到 下面这个程序 并且 学习 一种新的方法 来腾空 长方形的位置所占用的内存空间。长方形的位置 在这个程序当中 是 用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这个物件本身所占用的内存空间 腾空。