A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doudou33420 中级黑马   /  2014-11-7 14:22  /  808 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 doudou33420 于 2014-11-7 14:29 编辑

看视频的时候学到OC和其他语言不一样 是没有重载的 只有重写
但发现某些情况下是可以重载的  
  1. 例:  sumWith:(int)a;
  2.       sumWithL(int)a and:(int)b;
复制代码


这样是完全没问题的.  但这就和我们学习的知识冲突了. OC为什么有重载
查了一些资料 发现问题是 OC对函数名的定义:
obj-c中的方法签名是仅依靠各标签来判定的,不像c/c++中,是依赖函数名+参数类型列表
所以你的说法中,改变了第二个参数的描述,实际上就是一个全新的方法签名了
简单的说:  OC函数名是由多个参数描述字符串组成的;
明白这点 在看刚刚的重载
sumwith:
sumwith:and
完全是两个函数 两个不同的SEL
所以其实OC是没有重载的,,  
当别人问OC有没有重载的时候,, 你立马可以告诉他 我们OC也有重载, 不信我写给你看..(吼吼)

评分

参与人数 1技术分 +1 收起 理由
星河鹭起 + 1

查看全部评分

2 个回复

倒序浏览
我觉得还是应该说oc没有重载,毕竟oc是重写一个方法,和自动判断的重载区别很大
起码差了一行if代码
回复 使用道具 举报
OC里我不知道,不过我知道java里有重载和重写的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马