iOS之代理/协议 @protocal

理解:

@protocal 可以定义一个协议。一个类如果使用了这个协议,那么就要按照这个协议要求的去办事。最常见的就是UITableViewDelegate、UITableViewDataSource这个两个家伙。我们的类可以使用这两个协议,并对协议定义的方法进行实现(numberOfRowsInSection, heightForRowAtIndexPath...),然后需要绑定。因为我们的类已经实现了这个这两个协议。所以我们类中的tableview可以这样绑定:

tableview.delegate = self;

tableview.dataSource = self;

 

接下来就有疑问了,为什么写了上面2句话,我们的tableview就可以回调我们类中实现协议的函数呢。

可以想象UITableView中是如何回调我们定义的协议函数:(大概是这样:)

[_delegate heightForRowAtIndexPath:indexPath];

[_dataSource numberOfRowInSection:section];

注:上面的_delegate,_dataSource是代表的UITableView中封装的属性(对象)。

 

如果写过面向对象,ios中的协议,Java中的接口的话,应该可以理解上面的代码。

它这样写就是可以实现回调。疑问解决。

 

总结:

  1。函数回调,代理。类似于block,但是跟block又有很大的差别。请求网络,获取到服务器数据后,回调到初始界面。

    此时可以让初始界面实现协议,然后让请求服务器的类保有一个初始界面的协议对象,然后当获取到数据的时候,

    服务器可以根据这个协议对象,回调初始界面实现的协议具体方法。

  protocal还有2个关键字,required  和  optional关键字。

  如果你在定义协议的函数接口时,没有写上这两个关键字的话默认是required。

  required意思是以后谁使用了这个协议,就必须要实现这个协议里面的方法,是强制的。

  optional意思是可以实现协议里面的方法,也可以不实现协议里面的方法,是可选的。

至于protocal中区分具体的代理,协议。

代理就是把事情交给别人做。我只要保有那个人的电话就行了。

A类中保有一个B的代理对象引用P,B中实现了代理P, 并实现代理的方法是doSomeThing.

A类跟B类的绑定,只需要A.P = B;即可。以后有什么事,比如:

A类某天想要B做什么事,只要这样来[P doSomeThing]。B就会把事做好。

协议就是一种规范,大家必须都要按照协议说的去做。

说白了就是跟Java接口一样的功能,抽象成高层,屏蔽差异性。然后通过持有的对象引用去调用。

很好的表现对象的特性。

转载于:https://www.cnblogs.com/vokie/p/4868627.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值