培训之协议和代理.doc_第1页
培训之协议和代理.doc_第2页
培训之协议和代理.doc_第3页
培训之协议和代理.doc_第4页
培训之协议和代理.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京尚学堂提供在现实生活中我们存在各种各样的协议,但是都有一个共同点,就是拟定的协议,就要遵守,不遵守就是违约。在OC中也有协议这一个概念而且和我们现实生活中的协议的特点是类似的。有时我们自己想做什么事,但是现在没这个能力自己去做,亲力亲为,我们就需要找代理来帮我们做了。那么在OC中也有代理这个概念。下面就简单的说说OC中的协议和代理。一、协议在【iOS开发之Objective-C】对象的交互中实现了一种对象的交互的方式。在OC中还有其他方式,比如说协议,在OC中用协议来规范接口,是实现对象之间的交互的一种机制。类似于JAVA中的接口。还可以模拟多继承。协议的实现第一步:使用Xcode新建一个工程;怎么新建一个工程第二步:新建一个OC文件;在这个工程里面 New File- Objective-C File - 填写文件名 在File Type 里面选择“Protocol” 最后点击Next。第三步:“拟定”协议;假设我和某人签订和一个协议,协议里面需要我执行一个动作:每天练习一小时OC编程;那么这条协议内容就是: - (void)aDayCodeOneHour;这只是一个协议条款,协议自己本身事没有能力遵守协议或是实现协议。1. #import2. protocolMyProtocol3. -(void)aDayCodeOneHour;4. required/缺省属性,必须要实现5. -(void)show;/show是必须要实现6. property(nonatomic,assign)inta;7. optional/可选实现8. -(void)show1;/show1是可实现也可不实现9. end第四步:遵守协议;新建一个Person的类,在这个类.m文件里面来实现这个方法。在实现之前需要先表明你为什么实现这个方法。那么我们就需要在Person这个类里面表明我是遵守这个协议。我们就需要在类的.h文件里面表明我是遵守这个协议的。1. #import2. #importMyProtocol.h3. interfacePerson:NSObject4. property(nonatomic,assign)inta;5. end这里我们要做两件事,第一是包好协议这个头文件,第二就是interface Person : NSObject 。接下来就是协议的实现了。在Person.m这个文件中我们简单的实现一下:1. #importPerson.h2. implementationPerson3. -(void)aDayCodeOneHour4. NSLog(我的协议内容是“尚学堂最好的IOS培训机构”);5. 6. -(void)show7. NSLog(这是一个协议的例子。);8. 9. end第五步:主函数中演示1. #import2. #importPerson.h3. intmain(intargc,constcharchar*argv)4. autoreleasepool5. Person*ps=Personallocinit;6. psaDayCodeOneHour;/默认的也是必须要实现的7. psshow;/调用required修饰的一个方法8. ps.a=10;/给a赋值9. NSLog(%d,ps.a);/取a的值打印出来10. idobj=ps;/使用di的方法表明obj就是一个对象ps11. objshow;/obj也调用show这个方法12. 13. return0;14. 我们在协议MyProtocol 里面还有几句是没有说明的:required/缺省属性,必须要实现- (void)show;/show是必须要实现property(nonatomic,assign)inta;optional/可选实现- (void)show1;/show1是可实现也可不实现 l例子中没实现required缺省属性,被他修饰的方法是必须要实现的;optional可选属性,被他修饰的方法可以不实现在协议中我们不能声明变量,但是我们可以使用属性的方法:property(nonatomic,assign)inta;在协议遵守方中要实现这个,也是在.h文件中粘贴一些这条语句,系统自动会给我们生产set和get方法。主函数就比较简单了,但是需要学习这一句:idobj = ps;/使用id的方法表明obj就是一个对象ps的副本 objshow;/obj也调用show这个方法id的这一句,这里使用一个id类遵守MyProtocol协议的对象obj,让这个对象和对象ps指向的是同一块内存区域。怎么模拟多继承呢?其实也不难,我们可以这么实现 。其实在系统库里面也有很多这样的写法。这里我就不写了。二、代理模式什么是代理?代理模式是实现两个对象之间的交互的一种机制。在代理模式中涉及到两个对象,一个是主动方一个是被动方。主动方:拟定协议,创建一个携带协议的 id 指针(指向某个具体的代理);被动方:遵守协议,实现协议的方法。生活情境现在什么送外卖的很是多,每天路上都有很多发单的。我们不想取买饭,就可以叫外卖。我们可以指定哪一家吃什么?我们也不能说拿了外卖就不给钱吧,我们还需要给商家付款。这里涉及到四个问题。我买哪一家的饭?我买什么饭?我要给卖家付款。卖家需要得到他的饭款。情境拆解后就是这么几个步骤了。.买家的需求:我要吃饭,吃哪家的什么饭呢?.买家选店铺和吃什么;.卖家给买家送饭;.买家给卖家付款;.卖家得到他的饭款。代理的实现有了这些步骤下面实现起来就不难了。#import1. /在主动方拟定协议2. protocolBuyFood3. -(void)sendFood;/卖家送餐4. -(void)getMoney:(int)money;/卖家得到饭钱5. end6. interfacePerson:NSObject7. -(void)wantToEat:(NSString*)food;/买家想吃饭什么饭8. -(void)give:(int)money;/卖家给卖家多少钱9. /声明一个带有协议指针的属性10. property(nonatomic,assign)iddelegate;11. end1. #importPerson.h2. implementationPerson3. -(void)wantToEat:(NSString*)food/选好吃什么4. NSLog(顾客:我想吃%,food);5. self.delegatesendFood;6. 7. -(void)give:(int)money/买家付款8. /注意这里的self.delegate9. self.delegategetMoney:money;/付款给给我送餐的卖家10. 11. end1. #import2. #importPerson.h3. interfaceRooom:NSObject4. -(void)show;5. -(void)wantToGetMyMoney;6. end1. #importRooom.h2. implementationRooom3. 4. int_money;5. 6. -(void)sendFood/卖家送餐7. NSLog(店家:好的我马上给您派送);8. 9. -(void)getMoney:(int)money10. _money=money;/卖家得到饭钱就放进他自己的口袋了11. 12. -(void)wantToGetMyMoney13. /卖家想得到饭钱就需要买家付款买家付款给对应的卖家14. /这里就是代理的回调15. Person*p1=Personallocinit;16. p1.delegate=self;/注意这里的self谁调用这个方法self就是谁17. p1give:15;/give是主动方的方法买家付款15元18. 19. -(void)show20. NSLog(店家:我得到了我的money:%d,_money);21. 22. end23. #import24. #importPerson.h25. #importRooom.h26. intmain(intargc,constcharchar*argv)27. autoreleasepool28. Person*per=Personallocinit;29. Rooom*roo=Rooomallocinit;30. perwantToEat:鱼香肉丝饭;/我想吃鱼香肉丝饭31. per.delegate=roo;/指定代理设置代理选店铺32. roosendFood;/卖家送餐33. roowantToGetMyMoney;/买家付款卖家得到饭钱34. rooshow;/高兴的卖家说我得到了多少钱35. 36. return0;输出:1. 2015-08-0321:41:15.6563.代理模式3528:303顾客:我想吃鱼香肉丝饭2. 2015-08-0321:41:15.6733.代理模式3528:303店家:好的我马上给您派送3. 2015-08-0321:41:15.6743.代理模式3528:303店家:我得到了我的money:15Program ended with exitcode: 0以上就这这个情景模式的全部代码。里面有协议,有代理也有代理的回调。每一步是做什么的上面有分析,代码中也有注释。我们再来分析:.买家的需求:我要吃饭,吃哪家的什么饭呢?.买家选店铺和吃什么 / 买家选店铺指定代理.卖家给买家送饭; / 选定店铺后卖家需要做的 协议.买家给卖家付款; / 给代理传值正向传值 买家给卖家付款.卖家得到他的饭款。 / 代理的回调卖家需要从买家那里得到饭钱代理的回调代理的回调:调用某个功能模块,这个功能模块返回一些数据,但是功能不知道具体返回给哪个对象,这个时候,我们可以通过协议规范接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论