黑马程序员技术交流社区
标题:
代理协议的问题
[打印本页]
作者:
愿我能
时间:
2014-4-18 10:24
标题:
代理协议的问题
本帖最后由 愿我能 于 2014-4-18 15:33 编辑
代理可以帮你做一些琐碎的事情,如视频中讲到的代理买票,可应用的时候总感觉摸不到头脑,就像是你与代理之间到底该定义一个什么样的协议,变量该如何在其中传送,求解惑 代理如何使用?
作者:
悟中生有
时间:
2014-4-18 10:47
说一说我的理解吧:
1,首先是:基本用途:协议可以用来声明一大堆方法(不能声明成员变量);只要某个类遵守了这个协议,就相当于拥有了这个协议宏的所有方法声明;只要父类遵守了某个协议,就相当于子类也遵守了。
格式:
//1,协议的编写
@protocol 协议名称
//方法列表
@end
复制代码
2,定义变量时指定遵守协议:
格式:
/*
类名<协议名称> *变量名
id<协议名称> 变量名
*/
NSObject<MyProtocol> *obj;
id<MyProtocol> obj2;
复制代码
使用:
//@property (nonatomic, strong) 类名<协议名称> *属性名;
@property (nonatomic, strong) Dog<MyProtocol> *dog;
// @property (nonatomic, strong) id<协议名称> 属性名;
@property (nonatomic, strong) id<MyProtocol> dog2;
复制代码
3,协议的应用--代理设计模式
<1>设计原理
自己不想亲自去做的事情,可以找人帮忙做,这就是代理。
<2>设计思路
(1)明白代理会做的事情,即代理的属性
(2)明白代理要去做的事情,即代理的方法
(3)换个代理后,自身不受到影响。
<3>实现方案
(1)定义一个协议protocol,在其中声明一些和代理沟通的方法
(2)拥有一个代理属性,也就是代理的功能
(3)让代理遵守定义的协议protocol
作者:
Er01c
时间:
2014-4-18 10:52
当某个方法你不能或不想直接去执行(比如买票),你可以在本类中添加一个 (id)<MyProtocol> delegate 的代理属性(成员变量),用delegate指向代理对象(代理类可以不唯一,但代理对象都需要遵守 MyProtocol 协议),这样就可以不依赖于固定的代理类(降低耦合性,减少代码量)
@property (nonatomic, retain) id<MyProtocol> delegate;
Person *p = [[[Person alloc] init] autorelease];
Agent *a = [[[Agent alloc] init] autorelease];
p.delegate = a;
[p buyTicket];
NextAgent *a1 = [[[NextAgent alloc] init] autorelease];
p.delegate = a1;
[p buyTicket];
复制代码
作者:
愿我能
时间:
2014-4-18 11:03
悟中生有 发表于 2014-4-18 10:47
说一说我的理解吧:
1,首先是:基本用途:协议可以用来声明一大堆方法(不能声明成员变量);只要某个类遵 ...
谢谢 明白了一些
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2