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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹雨 中级黑马   /  2014-7-17 16:37  /  1553 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹雨 于 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
复制代码

请大神们告知啊

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

6 个回复

倒序浏览

property (nonatomic, strong) id<Myprotocol2> obj;
这句话的意思创建一个必须遵守协议<Myprotocol2>的NSObject对象,和person里已经有协议没有关系,并不是所有含有协议的类创建出来的对象都含有类中的协议,主要还看对象本身又没有协议。
你写的第二句如果是按MJ老师讲的,应该因为<Myprotocol1>遵守<Myprotocol3>,所以Person对象obj4创建出来才包含了三个协议

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报
楼主,你好
我认为你说的是对的
最后一句obj4 应该是遵守 1,2,3协议的
因为首先,他是Person对象,那么Person对象是遵守1 2协议的
而在创建的时候 obj4这个对象的时候 又指明必须要遵守3协议
所以就遵守1 2 3协议了

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

明白了,3Q
回复 使用道具 举报
huangqiwa 发表于 2014-7-18 14:22
楼主,你好
我认为你说的是对的
最后一句obj4 应该是遵守 1,2,3协议的

非常感谢,大神解释的非常清楚
回复 使用道具 举报
我是一只小小强 发表于 2014-7-17 19:46
property (nonatomic, strong) id obj;
这句话的意思创建一个必须遵守协议的NSObject对象,和person里已经 ...

想问下大神,如果Person类有协议1,2,创建出来的Person对象是否拥有1,2呢?
回复 使用道具 举报
曹雨 发表于 2014-7-20 16:25
想问下大神,如果Person类有协议1,2,创建出来的Person对象是否拥有1,2呢?

那肯定就遵守了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马