IOS中的委托和协议

在oc中广泛应用委托的设计模式(可和代理模式做一下比较)。
委托的概念顾名思义就是委托别人去做某件事。当某件事发生之后自己并不去处理,而交予实现委托方法的类去处理。(这个和js中的绑定事件是一样的,将事件绑定在它的父元素中,也是一种委托。这个地方如果理解有误,欢迎来喷...)
协议就类似C++中的纯虚基类,只用于定义某些方法,让其他类来实现。
委托和协议并没有直接的关系,只是oc中中协议来实现委托(委托可通过其他方式实现)。

在OC中协议和委托的实现:
举个简单的例子:
一个界面上拥有一个UIWebView控件,而UIWebView控件的一些事件并不是都有UIWebView本身实现的,交给别人处理。

UIWebView.h中定义一个协议

@protocol UIWebViewDelegate 
@optional
- (BOOL)webView: (UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType: (UIWebViewNavigationType)navigationType;
- (void)webViewDidStartLoad: (UIWebView *)webView;
- (void)webViewDidFinishLoad: (UIWebView *)webView;
- (void)webView: (UIWebView *)webView didFailLoadWithError: (NSError *)error;

协议中定义了4个方法。


@property(nonatomic,assign) id<UIWebViewDelegate> delegate;

同时也定义了一个委托对象(类似与java中的属性),这个委托对象必须实现UIWebViewDelegate这个协议。
就拿下面这个方法来说:
- (void)webViewDidStartLoad: (UIWebView *)webView;

此方法表示webview开始加载时的事件执行的方法。

看看怎么使用这个协议
假设在一个界面中的首页控制器IndexViewController中有一个UIWebView控件。
IndexViewController.h中声明要实现的协议
@interface IndexViewController : UINavigationController <UIWebViewDelegate>
@end
表示IndexViewController要实现UIWebViewDelegate协议
在IndexViewController.m实现文件中实现UIWebViewDelegate定义的4个方法。
//...
- (void)webViewDidStartLoad: (UIWebView *)webView {
    //....
}
如果没有实现协议中的方法,则在调用的时候就可能出现错误。
要调用这个协议的方法。
在IndexViewController.m中的某个地方的代码
//...
webView.delegate = self;//指明webview的委托对象为自身
//...
此时在webView开始加载的时候就会执行IndexViewController.m中实现的代码。
即:webWiew中的开始加载事件委托给IndexViewController来完成。自己并不去处理。

欢迎探讨,欢迎来喷...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值