Objective-C 方法重载 - Selector 标识起决定作用

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

重载方法声明:

- (void)test;
- (void)test:(NSString *)command;
- (NSString *)test:(NSString *)command param:(NSString *)param;
- (NSString *)test:(NSString *)command param:(NSString *)param result:(NSString *)result;
- (NSString *)test:(NSString *)command result:(NSString *)result param:(NSString *)param;
- (NSString *)test:(NSString *)command :(NSString *)result :(NSString *)param;
- (NSString *)test:(NSString *)command param:(NSString *)param callback:(NSString *)callback;

以上每个方法的实现中,都加入这一句,用于打印当前方法的签名:

NSLog(@"%@", NSStringFromSelector(_cmd));

按如下顺序调用以上各方法:

    [interface test];[interface test:@"command"];[interface test:@"command" param:@"param"];[interface test:@"command" param:@"param" result:@"result"];[interface test:@"command" result:@"result" param:@"param"];[interface test:@"command" :@"result" :@"param"];[interface test:@"command" param:@"param" callback:@"callback"];

输出结果如下:

2015-02-28 12:14:02.724 TestWebView[1490:371780] test
2015-02-28 12:14:02.724 TestWebView[1490:371780] test:
2015-02-28 12:14:02.724 TestWebView[1490:371780] test:param:
2015-02-28 12:14:02.724 TestWebView[1490:371780] test:param:result:
2015-02-28 12:14:02.725 TestWebView[1490:371780] test:result:param:
2015-02-28 12:14:02.725 TestWebView[1490:371780] test:::
2015-02-28 12:14:02.725 TestWebView[1490:371780] test:param:callback:

由下图 XCode 的错误提示可知,数据类型不能用于区分重载方法:

由下图 XCode 的错误提示可知,冒号前的参数名是用于区分方法签名的依据,形参名和数据类型一样,并不起作用,这源于 selector 的构成要素是冒前前的部分:

由此可以总结:

1、参数个数决定了方法的签名;

2、相同参数个数的方法,参数名用于区分重载

3、数据类型和形参名不能用于区分方法

4、selector 的构成要素决定了,冒号前的部分所构成的方法签名用于区分方法

Objective-C 方法重载 - Selector 标识起决定作用相关推荐

  1. 令人发指的关于方法重载和方法重写的一些理解(多态)

    令人发指的关于方法重载和方法重写的一些理解 文章目录 **令人发指的关于方法重载和方法重写的一些理解** **方法重载的基础** **子类的方法重载** **重载升级只重写** **顺藤摸瓜之干掉&q ...

  2. 一个黑魔法,竟能让Python支持方法重载

    1. 你真的了解方法重载吗? 方法重载是面向对象中一个非常重要的概念,在类中包含了成员方法和构造方法.如果类中存在多个同名,且参数(个数和类型)不同的成员方法或构造方法,那么这些成员方法或构造方法就被 ...

  3. 嵌入式软件开发培训笔记——Java第三天(方法重载、对象的构造与初始化过程分析、封装等)

    一.掌握方法重载(Overload)     同一个类中方法名相同时,称为方法的重载(Overload)     特点:1.参数列表不同                     1)参数类型不同   ...

  4. java基础2:this、static、final、abstract关键字、代码块、生成API工具包、继承、多态、方法重载和重写,抽象类、接口、常见异常、java权限修饰符、选择排序思想和程序和内部类

    1.this关键字 this表示当前类对象的地址空间值的引用.就是说,this代表了new出来的对象 其最大作用就是解决了构造器中局部变量隐藏成员变量.即用this.变量名 = 变量名 区分. 2.s ...

  5. 没有与参数列表匹配的 重载函数 getline 实例_面试题:方法重载的底层原理?...

    前语:微信改版后,大量读者还没养成点赞的习惯,如写得好,望大家阅读后在右下边"好看"处点个赞,以示鼓励!长期坚持原创真的很不容易,多次想放弃,坚持是一种信仰,专注是一种态度. 关于 ...

  6. java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...

    [单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...

  7. java基础-方法重载

    **方法重载:**同一个类方法名相同,参数列表个数或参数不同即可 口诀: "两同一不同":同一个类,相同方法名 参数列表不同:参数个数不同,参数类型不同,参数顺序不同 **注意:* ...

  8. Java 方法重载 方法重写

    方法重载规则 参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数.引用类型绑定方法 ...

  9. 在java中方法重载的要求,Java方法的重载

    Java方法的重载 方法重载:在类中方法名称相同,但是形式参数不同 public class Demo15 { public static void main(String[] args) { int ...

最新文章

  1. 24 个必须掌握的数据库面试问题!
  2. 4.9 行列均不满秩方程
  3. TFS创建登录用户并连接TFS
  4. 【华为云技术分享】ARM体系结构基础(2)
  5. mysql 大表更新数据类型_MySQL优化之表结构优化的5大建议(数据类型选择讲的很好)...
  6. python 整除的数组_LeetCode 974. 和可被 K 整除的子数组 | Python
  7. 游戏代理ip怎么设置_游戏代理怎么做
  8. 计算机网络原理的思维导图汇总
  9. SLC、MLC和TLC三者的区别
  10. 2020 iOS拼多多(多多进宝)APP端接入,打开拼多多商品详情与授权
  11. omni的 osx86 ati 驱动
  12. 一步一步SharePoint 2007之十九:解决实现注册用户后,自动具备访问网站的权限的问题(1)——配置Provider...
  13. Vue父组件传参数给子组件时,页面崩溃或者报undefined或者数据为空或者执行了两遍
  14. ad采样的符号位_AD位数是如何影响信号幅值的?
  15. contiki-6lowpan开发环境之搭建
  16. 华为鸿蒙harmonyos-面向全场,华为鸿蒙 OS 下月发布?别做梦了……
  17. 前端常见面试题 - JS篇
  18. ad怎么导入cad的外形尺寸_AD10怎样精确导入CAD文件?
  19. 一起智慧课堂_聚焦课堂,提升质量——六盘水市钟山区第一小学“智慧”课堂校际交流活动...
  20. 耳机不分主从是什么意思_音质出色,降噪服众,千元机档位王者南卡A1主动降噪耳机深度评测...

热门文章

  1. 语义分割算法性能比较_AAAI 2020 | 商汤:新视频语义分割和光流联合学习算法
  2. java怎么求方程的虚根_java怎么求一元二次方程虚根,虚根i怎么定义啊。
  3. Ext3 -- Form 实例。 用来migrate file 数据到DB用的
  4. java addall 不能传null_null 之AddAll、Add和Boolean
  5. linux挂载磁盘组,11G ASM磁盘组不能自动MOUNT处理
  6. linux系统找运行指令,Linux系统常用指令总结
  7. linux 多个makefile,linux – 具有多个目标的Makefile
  8. 华为服务器怎么查看系统日志,查询系统操作日志(operationlog)
  9. mysql开启binlog日志影响性能吗_mysql binlog日志优化及思路
  10. Linux中Docker部署Tomcat