------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------
定义: 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象
而代理对象可以在客户端和目标对象之间起到中介的作用。
使用代理模式可以降低耦合度。大大的增强了代码的弹性。
例:小明想看电影,但是没时间买票于是就拜托小强去买票
利用 协议,我们可以把协议当做一个 “用户”与 “代理”之间的中转站
以下是这个例子的协议
1. @protocol TicketDelegate<NSObject>
2. //票价
3. - (double) ticketPrice;
4. //剩了多少张票
5. - (int) leftTicketNumber;
6. @end
复制代码
让代理类遵守协议 并且实现应该实现的方法
1. @interface Agent : NSObject<TicketDelegate>
2.
3. @end
复制代码
这样有了 一个可以代理协议 跟一个代理,还可以通过协议实现更多的代理
1. @implementation Person
2.
3. //想看电影
4. - (void) buyTicket
5. {
6. //让代理帮忙买票(询问票价剩余张数)
7. double price =[_delegate ticketPrice];
8. int number = [_delegateleftTicketNumber];
9. NSLog(@"通过代理知:票价= %f,剩余票数= %d",price, number);
10. }
11.
12. @endl
复制代码
在person类中 _delegate这个变量代表着 所使用的代理
在上面已经说了要使用id类型 但id类型必须要遵守协议
才能使_delegate 能够使用协议中的方法
这样就解决了上面所说的无法识别(代理中的方法)的问题
1. @interface Person :NSObject
2.
3. - (void) buyTicket;
4. @property (nonatomic,retain)id<TicketDelegate> delegate; // 必须遵守协议
5.
6. @end
复制代码