在最初学习的时候,最先接触的一个常用的东西就是tableview,在使用的时候.h文件需要加 UITableViewDelegate,UITableViewDataSource。 否则XCODE就不会自动提示tableview的几个方法,就算自己打出来还是会报错。我们点开UItableViewDelegate,可以看到
我们再点开uitableviewDataSource可以看到
这里在Protocol下有许多方法正是我们要用的方法,而这里还有2个关键字required和optional。
这便是OC的协议(protocol)机制。
首先需要声明UITableviewDataSource协议
@protocol UITableViewDataSource;
Protocol协议就是对类的实现进行一些约束,比如添加一些接口方法,那么执行这个协议的类就要实现这些接口,如上图中UItableviewDelegate下的接口。
但是这些协议下的接口并不是一定要实现的,有两个关键字required和optional。前者下的接口必须要实现,后者可以不用实现,如上图中UITableviewDataSource下的@optional下的接口numberOfRowsInSection和cellForRowAtIndexPath,我们知道这两个方法是必须实现的,不然tableview就不能实现。
那么怎么去实现这些协议呢,需要表明执行该协议即可。
在我们需要执行这些协议的Class下,必须倒入这些protocol的名字,已表明要执行这些协议如下:
这样我们在实现协议下的方法是就不会出现unrecognized selector sent to instance这种错误了。
简而言之就是protocol就是一个可以包含很多方法的东西,它下面方法可以被任何类实现,只需要表明执行该协议即可。主要用于没有父子关系的类之间,但是它们有相同点。就相当于说系统的UItableview本身发布里一个实现tableview的任务,然后定下了协议就是各种方法,然后这个任务被代理了,比如上面的viewcontroller,那么它就按照协议的要求实现这个任务,于是就能实现一个tableview出来。
然后类A调用类B, 当类B想回调类A的方法的时候, 要用到delegate