多个参数的写法

(方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ;

举个例子,一个方法的定义:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName;

实现这个函数的时候:

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName

{

大儿子 = myOldestKidName; 二儿子 = mySecondOldestKidName; 三儿子 = myThirdOldestKidName;

}

调用的时候:

Kids *myKids = [[Kids alloc] init];

[myKids setKids: @”张大力” secondKid: @”张二力” thirdKid: @”张小力”];

一上内容为引用 ,引用地址tp://blog.163.com/long_wtf/blog/static/185553270201111910536/

刚开始接触Objective-C的时候,会感觉这种函数声明和调用都有点怪,实际是受C和C++传统函数声明方式的影响,看会C++的函数声明

void setKids(string *myOldestKidName , string *mySecondOldestKidName , string *myThirdOldestKidName);

调用的时候:

myKids.setKids("张大力","张二力","张小力");

在C++里,以我们的观点这个函数的”函数名“是setKids,然后()内是参数类型和形参变量

C++中有overload(重载)的概念,我们可以声明void setKid(int myOldestKidAge , string *mySecondOldestKidName , string *myThirdOldestKidName);

编译器是如何识别这两函数呢,实际是对于编译器会将所有参数的类型加到函数名上,变成setKid_string_string_string 和setKid_int_string_string (这里忽略了this等隐藏参数)

对于编译器我们的两个setKid原本就是不同的,重载只是对于我们而言。

对于Objective-C中,许多人认为“Objective-C中参数表是这样的, 参数名:(数据类型)形参名。第一个参数的参数名就是函数名”,其实这种理解不太正确,对于Objetive-C的函数名应该是由所有参数名的组合的,如上例中函数名是setKid:secondKid:thirdKid: 有使用过@selector的同学,会知道我们使用@selector获得带三个参数的函数的sel类型(可以当函数标识符理解)需要这样用@selector(setKid:secondKid:thirdKid)。

所以我的理解时函数名是setKid:secondKid:thirdKid: ,而setKid实际是第一个参数的参数名。

这有一个问题是Objecitve-C为什么不像C++一样,直接使用形参的数据类型放到函数名里,而非要让我们给每一个形参定义一个参数名呢。这是因为重载的方法只在类的内部,在C++中如果让同一函数在子类父类的不同对象中执行相同函数名有不同的实现,重载是办不到的,我们需要加vitrual关键字,把它声明成虚函数,这就是多态。在Objetive-C中所有的函数均是具有多态特性的,都可在运行时动态执行调用,我们需要一种方式对于所有的同名函数,在不同的对象可以动态执行,这时候Objetive-C便选择了中缀表达方式。

object-c 1的更多相关文章

  1. CoreCLR源码探索(一) Object是什么

    .Net程序员们每天都在和Object在打交道 如果你问一个.Net程序员什么是Object,他可能会信誓旦旦的告诉你"Object还不简单吗,就是所有类型的基类" 这个答案是对的 ...

  2. JavaScript Object对象

    目录 1. 介绍:阐述 Object 对象. 2. 构造函数:介绍 Object 对象的构造函数. 3. 实例属性:介绍 Object 对象的实例属性:prototype.constructor等等. ...

  3. javascript之Object.defineProperty的奥妙

    直切主题 今天遇到一个这样的功能: 写一个函数,该函数传递两个参数,第一个参数为返回对象的总数据量,第二个参数为初始化对象的数据.如: var o = obj (4, {name: 'xu', age ...

  4. c# 基础 object ,new操作符,类型转换

    参考页面: http://www.yuanjiaocheng.net/webapi/config-webapi.html http://www.yuanjiaocheng.net/webapi/web ...

  5. APEX:对object中数据进行简单处理?

    在Salesforce中,常常要对各种数据进行处理,已满足业务逻辑.本篇文章会介绍如何实现从object获取数据,然后将取得的数据进行一系列简单处理. 第一步:SongName__c 是一个新建的ob ...

  6. 笔记:Memory Notification: Library Cache Object loaded into SGA

    笔记:Memory Notification: Library Cache Object loaded into SGA在警告日志中发现一些这样的警告信息:Mon Nov 21 14:24:22 20 ...

  7. Selenium的PO模式(Page Object Model)[python版]

     Page Object Model 简称POM  普通的测试用例代码: .... #测试用例 def test_login_mail(self): driver = self.driver driv ...

  8. Object是什么

    Object是什么 .Net程序员们每天都在和Object在打交道如果你问一个.Net程序员什么是Object,他可能会信誓旦旦的告诉你"Object还不简单吗,就是所有类型的基类" ...

  9. a different object with the same identifier value was already associated with the session:

    hibernate操作: 实例化两个model类,更新时会提示  a different object with the same identifier value was already assoc ...

  10. CSharpGL - Object Oriented OpenGL in C#

    Object Oriented OpenGL in C#

随机推荐

  1. JavaScript标准Selection操作

    简介 术语 属性 方法 document.activeElement document.designMode = 'on'; 简介 selection是对当前激活选中区(即高亮文本)进行操作. 在非I ...

  2. java_泛型方法使用实例

    //提供两种使用情况,第二种情况定义前者是后者的子类-类型通配方式 package ming; import java.util.ArrayList; import java.util.Collect ...

  3. 认识CoreData-多线程

    CoreData使用相关的技术点已经讲差不多了,我所掌握的也就这么多了.... 在本篇文章中主要讲CoreData的多线程,其中会包括并发队列类型.线程安全等技术点.我对多线程的理解可能不是太透彻,文 ...

  4. CSS3 动态魔方的展示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. GCC生成的汇编代码

    假设我们写了一个C代码文件 code.c包含下面代码: int accum = 0; int sum(int x, int y){ int t = x + y; accum += t; return ...

  6. mac mysql error You must reset your password using ALTER USER statement before executing this statement.

    安装完mysql 之后,登陆以后,不管运行任何命令,总是提示这个 step 1: SET PASSWORD = PASSWORD('your new password'); step 2: ALTER ...

  7. c++中运算符重载,+,-,--,+=,-=,*,/,*=,/=,

    #include<iostream> #include<stdlib.h> using namespace std; class Complex { public: Compl ...

  8. 忘记root口令的处理方法

    最近在拜读<Unix & Linux 大学教程>这本书,这本书写得不错.关于Unix和Linux比较介绍比较深入根源,内容也比较详细,很值得去拜读.       在书中的附录中有一 ...

  9. powerdesign设置实体显示格式

    工具-显示参数选择中,如下图:

  10. sql标准化的后缀

    今天在SQL编码风格中看到的sql编码标准