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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王雪冬 中级黑马   /  2014-4-14 17:48  /  1661 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  王雪冬 于 2014-4-15 06:55 编辑

先创建一个Protocol1
  1. #import <Foundation/Foundation>

  2. @protocol MyProtocol1

  3. -(void) test();

  4. @end
复制代码
先创建一个Protocol2
  1. #import <Foundation/Foundation>

  2. @protocol MyProtocol2

  3. -(void) test();

  4. @end
复制代码

注意:这两个都有同一个方法名 test()
那么,创建一个类,遵守 这两个协议
  1. #import <Foundation/Foundation>

  2. #import "MyProtocol1"

  3. #import "MyProtocol1"

  4. @interface Person :NSObject <MyProtocol1 ,MyProtocol2>

  5. @end



  6. #import <Foundation/Foundation>

  7. #import "Person.h"

  8. @implementatin Person

  9.    //???????????????????????

  10. @end
复制代码

在最后的代码段中的   //?????????????????这个位置,请问
那这里应该怎么实现,来区分是实现 的事MyProtocol1  的协议,还是MyProtocol2的协议?


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

5 个回复

倒序浏览
协议只是提供需要实现的方法的方法声明,实现部分需要由程序员自己写出,所以不存在你提到的是MyProtocol1 还是MyProtocol2的问题。

评分

参与人数 1黑马币 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
C:\Users\hp\Desktop\ios-黑马培训\11.jpg

你说的我不明白,我是说实现的方法test()  
是MyProtocol1  还是MyProtocol2,因为这两个不是都有test()吗?

11.jpg (38.56 KB, 下载次数: 13)

11.jpg
回复 使用道具 举报
王雪冬 发表于 2014-4-14 18:38
你说的我不明白,我是说实现的方法test()  
是MyProtocol1  还是MyProtocol2,因为这两个不是都有test() ...

两个Protocol中有两个相同的方法声明test() ,当一个类遵守这两个协议时只是在那个类的方法声明部分重复的声明了这同一个方法,所以这个方法遵守的即是Protocol1中的test()又是遵守Protocol2中的test(),而且你写的这个-(void) test()不符合语法,对象方法应该写成- (void)test:,函数应该写成void test()。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
愿我能 来自手机 中级黑马 2014-4-15 00:15:59
报纸
协议方法相当于在.h
回复 使用道具 举报
愿我能 来自手机 中级黑马 2014-4-15 00:21:56
地板
手滑打出去了,相当于在.h文件中声明的,协议可以让多个文件同时遵守,省去了重复声明方法的繁琐,而两个协议有了同名方法不会强制区分,因为协议并没有要求方法内容,只是声明作用,遵守这个名称的方法就满足了协议,省去了方法在.h的声明
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马