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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 幕夏 于 2014-7-27 21:24 编辑

如果一个类遵守某个协议,这个类就要实现协议里面的方法,用一个protocol关联一堆方法,到底用以何在?

8 个回复

倒序浏览
协议主要是实现功能的扩展,又避免了继承的耦合性太强。比如说,操作系统中点击右上角的红叉关闭一个word窗口,如果当前编辑的文件没保存,就会弹出一个窗口提示你保存吧。这个功能怎么实现?显然不能由操作系统的设计者实现吧,他不可能知道某个应用程序在窗口即将被关闭时要采取什么动作。但他可以预留“关闭窗口时执行某动作”的功能,这可以通过协议来完成:他把“关闭窗口时执行某动作”的功能定义为协议中的一个方法,比如叫windowShouldClose()。在窗口类中定义一个成员变量delegate,在操作系统处理关闭窗口的代码中调用delegate.windowShouldClose() 。而编写word程序的程序员只要定义一个类声明遵守这个协议,实现windowShouldClose()方法,并把这个类传给窗口类的delegate变量,当关闭窗口时就会自动执行delegate实现的windowShouldClose()方法
回复 使用道具 举报
fantacyleo 发表于 2014-7-26 23:19
协议主要是实现功能的扩展,又避免了继承的耦合性太强。比如说,操作系统中点击右上角的红叉关闭一个word窗 ...

我有一个问题,在基础视频里,老师给讲的模型里用了 @property(nonatomic ,  retain)id<AngentDelegate> delegate;
这句代码里的那个retain 能换成strong 吗?
回复 使用道具 举报
道本真 发表于 2014-7-26 23:23
我有一个问题,在基础视频里,老师给讲的模型里用了 @property(nonatomic ,  retain)id delegate;
这句代 ...

可以啊,开了ARC后就是把retain改成strong啊,这个视频里也讲了的
回复 使用道具 举报
因为OC中没有多继承,所以用协议代理扩充方法。关联的方法可以在协议代理声明方法的时候选择可选方法。就不用一一实现,只要拿你需要的就OK
回复 使用道具 举报
fantacyleo 发表于 2014-7-26 23:19
协议主要是实现功能的扩展,又避免了继承的耦合性太强。比如说,操作系统中点击右上角的红叉关闭一个word窗 ...

哦,明白了,谢谢了
回复 使用道具 举报
幕夏 中级黑马 2014-7-27 20:07:51
7#
大龄产妇 发表于 2014-7-27 00:49
因为OC中没有多继承,所以用协议代理扩充方法。关联的方法可以在协议代理声明方法的时候选择可选方法。就不 ...

嗯,领悟了,谢了
回复 使用道具 举报
道本真 发表于 2014-7-26 23:23
我有一个问题,在基础视频里,老师给讲的模型里用了 @property(nonatomic ,  retain)id delegate;
这句代 ...

可以,  retain可以替换成Strong
回复 使用道具 举报
-(_)- 发表于 2014-7-27 21:38
可以,  retain可以替换成Strong

好的,谢谢指点
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马