`

Objective-C函数重载

阅读更多

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

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

实例:

 

 

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

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

[plain] view plaincopy
  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  

[plain] view plaincopy
  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关键词可以引用消息接收者的父类。

分享到:
评论

相关推荐

    From C++ to Objective-C

    - **重载与方法签名**:Objective-C不支持方法重载,但可以通过不同的参数列表来实现类似的效果。 - **成员函数指针:Selector**:Selector是Objective-C中表示方法调用的一种特殊类型。 - **参数默认值**:...

    From_C++_to_Objective-C

    - 方法重载与选择器:Objective-C支持方法重载,即相同的方法名可以有多个不同的参数列表;选择器(`SEL`)用于唯一标识一个方法。 - 参数默认值与可变参数列表:Objective-C允许定义方法时指定参数的默认值,也...

    From C++ to Objective-C (从C++到ObjectivC)

    Objective-C是建立在C语言之上的,它增加了一些面向对象的特性,同时采纳了Smalltalk的消息传递风格。C++是一种具有多范式的编程语言,包含了面向对象、泛型和过程式编程等特性。两个语言都来源于C语言,因此它们在...

    Objective-C中的重载和重写详解

    这使得Swift在多态性和代码可读性方面有所增强,弥补了Objective-C在函数重载方面的不足。 总结来说,Objective-C的重载主要体现在参数个数的不同,而不是参数类型的不同,这与许多其他语言不同。同时,重写是子类...

    Objective-C

    2. **不支持运算符重载**:Objective-C不支持ad-hoc多态,即运算符重载,这与C++不同。 3. **单继承**:Objective-C仅支持单继承,但通过Categories和Protocols可以实现类似多重继承的功能。 4. **性能**:由于动态...

    Objective-C、C++以及C之间的区别

    5. 方法重载:C++允许方法重载,Objective-C不允许相同名称和参数个数但参数类型不同的方法。 总的来说,Objective-C更适合Apple的生态系统,强调灵活性和动态性,而C++则更注重编译时的安全性和效率。C++在许多...

    Objective-C面试题.pdf

    - **方法重载**:虽然Objective-C不支持传统意义上的方法重载,但可以通过方法选择器实现类似的效果。 #### 三、高级技术题 1. **运行时(Runtime)特性与API**: - **定义**:Objective-C运行时API允许程序在运行...

    oc基础知识

    * Objective-C 语言支持函数的重载和函数的默认参数。 七、Objective-C 的面向对象编程 * Objective-C 语言支持类和对象的概念。 * Objective-C 语言支持继承、多态和封装等面向对象的概念。 * Objective-C 语言...

    Object-C语言教程&案例&相关项目资源.zip

    Object-C的基础是C语言,这意味着它继承了C的所有语法特性,如变量声明、函数定义、控制结构等。此外,它还引入了以下关键概念: - **消息传递**:Object-C中的对象通过发送消息来交互,而不是调用方法。当你在...

    使用Flutter克隆FacebookUI组件_Dart_Objective-C_下载.zip

    7. **集成Objective-C**:尽管Flutter是跨平台的,但在某些场景下,如调用原生API或者优化性能时,我们可能需要与Objective-C代码进行交互。Flutter提供了Platform Channels机制,通过它可以安全地在Dart和Objective...

    OBject-C_编程规范DOC.pdf

    8. 函数和方法的设计:如何设计清晰、高效、易于理解的函数和方法,包括参数的传递、返回值以及方法的重载。 9. 面向对象编程原则:如何在Objective-C中实现封装、继承和多态等面向对象原则。 10. 内存管理:...

    objective C概述

    5. **不支持运算符重载和多重继承**:Objective-C不支持C++中的运算符重载,也不允许多重继承,这一点与Java相似。但是,通过使用Categories和protocols,Objective-C可以提供多重继承的部分优势,同时避免了多重...

    Peachpit.Press.Objective.C.Visual.QuickStart.Guide.Feb.2010.rar

    1. **基础语法**:Objective-C的语法与C语言紧密相关,包括变量声明、控制结构(如if语句和for循环)、函数等基本概念。同时,Objective-C特有的语法如消息传递(`[receiver message]`)和实例方法的定义也会被详细...

    10道常用的Swift面试题(附答案).md

    5)Swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式,Objective-C支持动态派发(消息派发)方式 6)Swift支持函数式编程(高阶函数) 7)Swift的协议不仅可以被类实现,也可以被Struct和Enum...

    Objective-C中编程中一些推荐的书写规范小结

    一、类 1. 类名 类名应该以三个大写字母作为前缀(双字母前缀为Apple的类预留) 不仅仅是类,公开的常量、Protocol等的前缀都为相同的三个大写字母。 当你创建一个子类的时候,你应该把说明性的部分放在前缀和父类名...

    工作报告之手机ui设计开题报告.doc

    Objective-C是一种面向对象的编程语言,它在C语言的基础上增加了Smalltalk风格的消息传递机制。Objective-C主要应用于macOS X和gnustep系统,特别是在开发iOS应用程序时,如iPhone、iPod Touch、iPad等苹果移动终端...

    IOS开发基本知识

    Objective-C不支持构造函数重载,但可以通过定义多个初始化器来达到类似的效果。例如,可以提供一个无参数的初始化器`init`和一个带参数的初始化器`initWithColor:`。 #### 四、Get和Set方法 在Objective-C中,get...

Global site tag (gtag.js) - Google Analytics