天天看点

开源中国iOS客户端学习——(三)再看协议与委托

iOS里委托与协议是很重要的一块,如果理解不好很难区分协议与委托到底有什么不一样,这些东西在开发中是经常遇见的;

协议是类留给外部的一个接口函数的集合(一位高手用C++基类来解释是,把接口做为参数,回调基类的函数时,运行时识别,调用了相应子类的成员函数);

委托是iOS一种设计模式,通过委托别的类,来调用协议里的方法,相当于一个回调过程;

使用理解委托与协议步骤:

(1) 弄清楚谁委托谁,需要干什么?

拿上一篇博客下拉刷新源码案例分析,(在源码工程中comment文件夹里)有MessageSystemView这样一个类,该类用于用户的信息所用(比如谁给你留言,或者评论了你某一篇博客),我们也需要刷新获取最新信息,此处用到下拉刷新第三方类库EGORefreshTableHeaderView类委托MessageSystemView类来实现这个特性,这就需要在EGORefreshTableHeaderView类定义一个协议对象delegate。

(2)被委托类需要在interface中声明<XXDelegate>,表示该类要实现协议里的方法.

MessageSystemView实现EGORefreshTableHeaderView协议方法就要遵循EGORefreshTableHeaderDelegate协议.

(3)在被委托类里定义一个委托类的对象,将xx.delegate=self,意思是把委托的对象只想被委托对象;

在EGORefreshTableHeaderView.h文件中

EGORefreshTableHeaderView*_refreshHeaderView;

在ViewDidLoad中   view.delegate = self;     _refreshHeaderView = view;

(4)在被委托类的实现文件中调用协议方法,这就是实现委托方法的一个过程;

此处EGORefreshTableHeaderView类对象委托MessageSystemView类对象,在MessageSystemView实现对EGORefreshTableHeaderView类协议的调用;

MessageSystemView.m文件实现委托方法

当然要实现完整的下拉功能这几个委托只是其中一部分,被委托类里还需要有自己的成员函数,在委托方法正在被调用的时候触发被委托成员函数方法,在

MessageSystemView.h

MessageSystemView.m

根据这些练习了一个简单的下拉刷新Demo

效果图

.h文件里

.m文件里

正在学习过程中,错误之处请指正,欢迎交流,共同学习;

     本文转自新风作浪 51CTO博客,原文链接http://blog.51cto.com/duxinfeng/1208693:,如需转载请自行联系原作者