object-c 1
多个参数的写法
(方法的数据类型)函数名:(参数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便选择了中缀表达方式。
转载于:https://www.cnblogs.com/wuyuankun/p/4370061.html
object-c 1相关推荐
- 在kotlin companion object中读取Bean,注入Bean对象
在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件. 使用组 ...
- 在kotlin companion object中读取spring boot配置文件,静态类使用@Value注解配置
在kotlin companion object中读取配置文件 静态类使用@Value注解配置 class Config {@Value("\${name}")fun setNam ...
- Object的finalize()方法的作用是否与C++的析构函数作用相同
Object的finalize()方法的作用是否与C++的析构函数作用相同 public class Finalization {private static Finalization finaliz ...
- libgstreamer-1.0.so.0: cannot open shared object file: No such file or directory
1. 问题现象 error while loading shared libraries: libgstreamer-1.0.so.0: cannot open shared object file: ...
- RuntimeError: Expected object of backend CUDA but got backend CPU for argument
RuntimeError: Expected object of backend CUDA but got backend CPU for argument #4 'mat1' 原因:变量没有加cud ...
- RuntimeError: Expected object of device type cuda but got device type cpu for argument pytorch数据位置
RuntimeError: Expected object of device type cuda but got device type cpu for argument #2 'target' i ...
- Python错误:AttributeError: 'generator' object has no attribute 'next'解决办法
今天在学习生成器对象(generation object)运行以下代码时,遇到了一个错误: #定义生成器函数 def liebiao(): for x in range(10): yield x #函 ...
- Java OOP(Object Oriented Programming)个人理解及总结
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...
- 目标检测数据集The Object Detection Dataset
目标检测数据集The Object Detection Dataset 在目标检测领域,没有像MNIST或Fashion MNIST这样的小数据集.为了快速测试模型,我们将组装一个小数据集.首先,我们 ...
- 多尺度目标检测 Multiscale Object Detection
多尺度目标检测 Multiscale Object Detection 我们在输入图像的每个像素上生成多个锚框.这些定位框用于对输入图像的不同区域进行采样.但是,如果锚定框是以图像的每个像素为中心生成 ...
最新文章
- 数字化探索:建立学习型组织,HR 也能驱动业务营收?
- CocoaPods的安装失败方法
- C语言面试基础知识整理
- MATLAB报错“Exception in thread FileDecorationCache request queue java.lang.OutOfMemoryError: Java “
- 记录一段让我吐血的代码
- Cowboy 源码分析(十八)
- 耗时6年的DK博物科普巨著,全面提升孩子的认知高度
- 如何在三个月内获得三年的工作经验
- 很囧的实验:一辆奥迪究竟值多少女大学生? 阅读 3056 回复 12 [回复] [编辑] [修改]...
- Redis安装及HA(High Availability)配置
- linux配置rabbitmq远程登陆,linux配置安装 RabbitMQ详细教程
- 深入Elasticsearch:索引的创建
- 利用XMLHTTP实现ASP.NET无刷新提交 (老梁)
- iTOP-4418开发板Android7.1系统支持RFID、VGA、继电器、LOAR、CAN-RS485
- 数据库上机2(以图形化界面方式操作数据库系统)
- [memo] dlopen 与 --export-dynamic
- 局域网访问电脑上的html,Win10让局域网内其他电脑通过IP访问网站的方法
- Javascript(JS) leetcode 954. 二倍数对数组
- 一个有趣的SQL问题。
- java中包中建包怎么创建,Java集成开发环境 – IDEA中建包时如何把包分开
热门文章
- 【问链财经-区块链基础知识系列】 第三十三课 区块链溯源方案设计-中检集团区块链溯源平台
- 【问链-区块链基础知识系列】 第十五课 数字货币交易所的前世、今生和未来(二)
- java创建对象new后面为啥可以传入参数_来复习一下Java的对象知识
- mysql 安装 菜鸟_mysql安装
- 2017年09月23日普级组 环
- linux 目标文件格式,Linux工具 - NM目标文件格式分析
- java实训手册_java实训项目用户手册
- linux raid和mdadm,linux的raid和mdadm
- 一般服务器崩了要多久能修复,阴阳师服务器崩了修复了吗?阴阳师最新4月15日更新内容...
- 用户交互php源码,phpWebSite ,容许个人和群组用户很容易地维护一个交互式社区驱动的站点.phpWebSite...