黑马程序员技术交流社区

标题: protocol的问题 [打印本页]

作者: 曹雨    时间: 2014-7-17 16:37
标题: protocol的问题
本帖最后由 曹雨 于 2014-7-20 16:25 编辑
  1. @interface Person : NSObject<Myprotocol,Myprotoco2>

  2. @property (nonatomic, strong) id<Myprotocol2> obj;
  3. //obj对象声明在Person类里,本身是拥有Myprotocol,Myprotoco2,这里的id<Myprotocol2> obj是要

  4. 求obj对象只遵守Myprotocol2对吗?

  5. 还是说类遵守的协议,而类创建的对象是不遵守的,像Person<MyProtocol3> *obj4 = [[Person

  6. alloc] init];这里的<MyProtocol3>协议的obj4遵守协议1,2,3吗?

  7. @end
复制代码

请大神们告知啊
作者: 我是一只小小强    时间: 2014-7-17 19:46

property (nonatomic, strong) id<Myprotocol2> obj;
这句话的意思创建一个必须遵守协议<Myprotocol2>的NSObject对象,和person里已经有协议没有关系,并不是所有含有协议的类创建出来的对象都含有类中的协议,主要还看对象本身又没有协议。
你写的第二句如果是按MJ老师讲的,应该因为<Myprotocol1>遵守<Myprotocol3>,所以Person对象obj4创建出来才包含了三个协议
作者: huangqiwa    时间: 2014-7-18 14:22
楼主,你好
我认为你说的是对的
最后一句obj4 应该是遵守 1,2,3协议的
因为首先,他是Person对象,那么Person对象是遵守1 2协议的
而在创建的时候 obj4这个对象的时候 又指明必须要遵守3协议
所以就遵守1 2 3协议了

但是你所说的obj对象本身在Person类当中,作为Person类的一个成员变量,这个我认为是不具有Person类的协议的,因为他是一个成员变量,只不过是一个对象而已,所以这里有点混淆。要搞清楚协议的作用,是声明方法,遵守了协议就拥有了这个协议声明的方法,那么谁能拥有这些方法,只有对象,那么这里obj只是Person类的一个成员变量,只不过是一个NSObject 的对象而已,不是Person的对象。所以不能遵守Person的协议!
作者: 曹雨    时间: 2014-7-20 16:21
我是一只小小强 发表于 2014-7-17 19:46
property (nonatomic, strong) id obj;
这句话的意思创建一个必须遵守协议的NSObject对象,和person里已经 ...

明白了,3Q
作者: 曹雨    时间: 2014-7-20 16:22
huangqiwa 发表于 2014-7-18 14:22
楼主,你好
我认为你说的是对的
最后一句obj4 应该是遵守 1,2,3协议的

非常感谢,大神解释的非常清楚
作者: 曹雨    时间: 2014-7-20 16:25
我是一只小小强 发表于 2014-7-17 19:46
property (nonatomic, strong) id obj;
这句话的意思创建一个必须遵守协议的NSObject对象,和person里已经 ...

想问下大神,如果Person类有协议1,2,创建出来的Person对象是否拥有1,2呢?
作者: huangqiwa    时间: 2014-7-21 16:38
曹雨 发表于 2014-7-20 16:25
想问下大神,如果Person类有协议1,2,创建出来的Person对象是否拥有1,2呢?

那肯定就遵守了!




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