iOS 小常识5--传值

2018-03-07  本文已影响7人  金鲤

4:小常识5--传值

在iOS中,传值的方法,主要可分为block(块),delegate(代理),notifications(通知)。

今天跟大家分享一下关于这三种方法的适用场景。

Block

首先是block,我现在开发基本上用的最多的传值方法。轻量,直接,简单,易用,好处极多。

不过block到底有多好用呢?举个栗子,从控制器A跳转控制器B,你在控制器B中删除或增加了一条数据,在A中需要做相应的处理。

这个时候你只需要在B的.h文件加一个block属性C(copy,nonatomic修饰),从控制器A跳转到B的时候实现,并在B中进行了相应增减数据操作后调用这个block即可(调用时记得判断block是否为真,为真时调用)。

block,就这么简单,好处N多。

Delegate

接着时delegate,事实上在区分是该使用block还是使用delegate时。很多小伙伴都会有些迷糊,然后选择自己用的多,用的熟练的来用。直到在后来的开发中,才会郁闷自己不合适的选择。

总的来说,block与delegate都是1对1的特点。这是两者本质上的相同,给开发者使用其中一种时,会觉得另一种很多余的感觉。

如果你非要说两者之中一种可完全取代另一种也不是不可以,因为这的确是能做到的。只是,不根据相应的情况选择相应更合适的方式,会在你未来的开发中时时胃疼。

相对于delegate来说,block书写简单,使用简单,易读,易维护。在简单的逻辑中使用block,更方便,更现实,可谓日常必备。注:小心滥用block而造成的循环引用。

相对于block来说,delegate更适用于方法过多,调用过频繁的场景,并且轻易不会造成循环引用之类的问题。注:相对于block来说,delegate的定义和使用麻烦多了。建议小伙伴们在简单不易出错的逻辑中,还是用block为佳。更易读,代码也更紧凑。

Notifications

相对于前两者,notifications可一对多的传值。而且用起来也是简单,实用。但是也因为轮询机制,用起来更耗资源。而且有添加就要有移除,如果忘了,崩溃会随之而来。

notifications的强大是毋庸置疑,适用于跨层次的传值通信。

举个栗子,很多社交app中都有发活动的功能,在一个简单活动列表中点击相应的活动,进入相应的详情页面。而后,假如活动是允许被删除的。你作为活动的发布者可以在详情页面点击相应的按钮进入更次一级的管理页面中删除活动的时候。

那么你最好在活动列表的页面添加一个活动移除的通知。然后,在删除活动的页面发送删除通知刷新活动列表,并移除根控制器的详情页面和管理页面,直接退回到活动列表页面。

否则,你难道还要使用block和delegate来处理相应事件吗?

总结

block(块),delegate(代理),notifications(通知)三种方式各有所长。根据相应的环境使用相应的方法,能让你的应用更易读,易维护,易使用。给小伙伴们一个建议,这些在开发中经常会用到的东西,一定要常写常用。不能看一看,捋一捋觉得基本都看懂了就行了。直到哪天你自己在在写代码的过程中,突然有了一种对于应该在什么样的场景中使用什么样的方式的感受才是正确的,你才算是真的看懂了。

上一篇 下一篇

猜你喜欢

热点阅读