Objective-C函数重载


1、重载定义:派生类继承父类方法时,该方法具有相同的返回类型,并且参数的数目与重载的方法相同,即对父类同名函数进行重写。

2、好处:可以利用重载来修改继承方法的定义。

实例:

  1. #import <Foundation/Foundation.h>  
  2.   
  3. @interface declaration : NSObject  
  4.   
  5. {  
  6.     int x;  
  7. }  
  8.   
  9. -(void) initVar;  
  10. @end  

 

  1. @implementation declaration  
  2.   
  3. -(void)initVar  
  4. {  
  5.     x=100;  
  6. }  
  7. @end  

 

  1. #import <Foundation/Foundation.h>  
  2. #import "declaration.h"  
  3.   
  4. @interface ClassB : declaration  
  5. {  
  6.       
  7. }  
  8.   
  9. -(void) printVar;  
  10.   
  11.   
  12. @end  

 

  1. #import "ClassB.h"  
  2.   
  3. @implementation ClassB  
  4.   
  5.   
  6. -(void)printVar  
  7. {  
  8.     NSLog(@"x=%i",x);  
  9. }  
  10. @end  

在如上的代码中,我定义并实现了两个类:declaration和ClassB,前者作为基类,后者作为派生类即子类,直接存在继承关系。现在如果我们在派生类中写一个与基类同名的函数:initVar,并且返回类型和参数个数名字都相同,那么派生类中的initVar函数就是重载基类中的同名函数了,而重载是属于复制函数,属于子类的,不是使用基类。

重载dealloc方法和super关键字

delalloc是从NSObject继承的。为什么我们在释放内存时不用release方法而用dealloc方法呢?因为在我们实践中release有时释放对象使用的内存,有时却不。只有在其他人引用某个对象时,release才释放该对象所占用的内存。这通过调用该对象的dealloc方法来完成,实际上是由dealloc来释放内存的。

如果重载dealloc方法,必须确保不仅要释放自己的实例变量所占用的内存,而且释放继承的变量所占的内存。

通过使用super关键词可以引用消息接收者的父类。

相关内容