黑马程序员技术交流社区

标题: 关于实现Protocol的问题 [打印本页]

作者: 王雪冬    时间: 2014-4-14 17:48
标题: 关于实现Protocol的问题
本帖最后由  王雪冬 于 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的协议?



作者: 微尘•逐梦    时间: 2014-4-14 18:16
协议只是提供需要实现的方法的方法声明,实现部分需要由程序员自己写出,所以不存在你提到的是MyProtocol1 还是MyProtocol2的问题。
作者: 王雪冬    时间: 2014-4-14 18:38
C:\Users\hp\Desktop\ios-黑马培训\11.jpg

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

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

11.jpg

作者: 微尘•逐梦    时间: 2014-4-14 19:01
王雪冬 发表于 2014-4-14 18:38
你说的我不明白,我是说实现的方法test()  
是MyProtocol1  还是MyProtocol2,因为这两个不是都有test() ...

两个Protocol中有两个相同的方法声明test() ,当一个类遵守这两个协议时只是在那个类的方法声明部分重复的声明了这同一个方法,所以这个方法遵守的即是Protocol1中的test()又是遵守Protocol2中的test(),而且你写的这个-(void) test()不符合语法,对象方法应该写成- (void)test:,函数应该写成void test()。
作者: 愿我能    时间: 2014-4-15 00:15
协议方法相当于在.h
作者: 愿我能    时间: 2014-4-15 00:21
手滑打出去了,相当于在.h文件中声明的,协议可以让多个文件同时遵守,省去了重复声明方法的繁琐,而两个协议有了同名方法不会强制区分,因为协议并没有要求方法内容,只是声明作用,遵守这个名称的方法就满足了协议,省去了方法在.h的声明




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2