通知 代理 block对比。

通知:

1.“一对多”,“多对一”传值

2.应用场景: 一对多传值的时候。  相隔多层的控制器之间传值的时候。

3.使用通知需要注意的是,控制器销毁的时候一定记得移除通知,项目中的通知尽量越少越好,通知多了比较难控制,很有可能发出了通知有别的控件监听到了从而做出相应操作

4.对于通知来说,通知的发送者根本不管接收者是否收到通知,也不管收到通知之后做什么操作,发送者只管发送,发送之后跟他没有一毛钱的关系了。

代理:

1.“一对一传值”

2.应用场景:一般用过公共接口,比如tableview的dalegate。

3.代理要注意的是:单例对象不能用代理! 使用代理之前需要先用respondsToSelector方法判断其代理是否符合了协议,防止程序崩溃。

4.代理比较注重过程信息的传输,比如需要知道 消息是否开始发送,是否收到消息,是否消息发送完成。

block:

1. 跟代理一样 “一对一传值”

2. 应用场景: 网络请求回调,动画,GCD。。。。

3. 重中之重就是需要注意block的循环引用!

4. block比较注重结果,需要知道是否成功。

代理和block的对比:

代理成本低,而block成功很高。因为block要将数据从栈内存拷贝到堆内存,当用完或者block置为nil的时候才会被消除。 而delegate只是存储了一个对象指针,没有额外消耗。

代理需要 定义协议方法,代理实现协议方法,代理需要写很多,而且必须建立代理关系才能通信,而block就简单很多,代码比较简洁,干净。

由于block更简便,在创建的时候就区分了来源,而代理需要区分识别来源,所以苹果官方推荐而且越来越多的使用block,至于它的性能问题,开发者不用考虑过多,苹果会处理好。

时间: 2024-10-16 15:51:16

通知 代理 block对比。的相关文章

通知/代理/block 三者比对

通知 :   “一对多”,”多对一” 传值 四个步骤:  1.发送通知2.创建监听者3.接收通知4.移除监听者 使用场景:1- 很多控制器都需要知道一个事件,应该用通知:2 - 相隔多层的两个控制器之间跳转 注意事项:  1, 一旦接收消息的对象多了,就难以控制了,可能有你不希望的对象接受了消息并做了处理 2,创建了观察者,在dealloc里面一定要移除: ————————————————————————————————————————————————————————————— 代理 “一对一”

回传值(代理、通知、block)

回传值问题,一直都是困扰初学者的问题,今写者 代理.通知.block 三者的回传值做了一个小小的总结, Main.storyboard 视图: 通过代码分别创建三个代表 代理.通知.block 的按钮,点击相应的按钮,会将相应的文本传入文本框中显示出来 代码如下: 1 // GWFMyDelegateBlockNotyView.h 2 // 回传值 3 4 #import <UIKit/UIKit.h> 5 @class GWFMyDelegateBlockNotyView; 6 7 //协议

iOS开发——UI篇&amp;代理/通知/Block传值(实现UItableView分组的收缩与展开)

代理/通知/Block传值实现UItableView分组的收缩与展开 初始化之后出现下面的界面 准备: 1:定义一个BOOL值用来记录点击 1 @property (nonatomic, assign, getter = isOpen) BOOL open; 2:在相应的点击方法里面是实现点击 1 self.group.open = !self.group.open; 3:在numberOfRowsInSection中返回的时候使用三木判断是否点击,并且实现伸缩与展开, 1 return mod

UI13-GET POST 同步,异步-代理 Block请求方式。

http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213 http://project.lanou3g.com/teacher/yihuiyun/lanouproject/activitylist.php 两个接

iOS 通知代理执行代理方式时,代理为nil的解决办法

1.下面代码是描述: 点击Toolbar上的按钮时,通知代理去调代理方法. 1 - (void)didClickedToolbarBtn:(UIButton *)button 2 { 3 4 if ([self.delegate respondsToSelector:@selector(toolbar:didClickedButton:)]) { 5 [self.delegate toolbar:self didClickedButton:button.tag]; 6 } 7 self.sele

block和代理使用对比

demo设计:做简单的抽奖,在viewcontroller中调用代理和block去获得抽奖号码,在viecontroller中打印出来. 代理类的.h文件 @protocol DelegateClassDelegate; @interface DelegateClass : NSObject @property(nonatomic,weak) id<DelegateClassDelegate> delegate; -(void)dosomthing; @end @protocol Delega

61 (OC)* 代理 block 通知 代理 kvo

1.从源头上理解和区别block和delegate delegate运行成本低,block的运行成本高. block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除.delegate只是保存了一个对象指针,直接回调,没有额外消耗.就像C的函数指针,只多做了一个查表动作. 2.从使用场景区别block和delegate 有多个相关方法.假如每个方法都设置一个 block, 这样会更麻烦.而 delegate 让多个方法分成一组,只需要设置一次,

整理一下 通知传值 Block传值

Block: 一. (1) 在需要传值的界面定义属性 // 点击collectionViewCell的回调 @property (nonatomic, copy) void(^DidcollectionClick)(NSIndexPath *indexPath); 在按钮或者手势 或者代理方法中 执行block - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPa

代理&amp;Block 传值

刚学习苹果开发的时候不懂代理,Block,感觉好麻烦,就知道大概意思,现在回头看,发现就懂了,留一份自己的Demo希望初学的人能够看出点什么. 代理传值:在第二个界面输入值传给第一个界面 MainViewController #import <UIKit/UIKit.h> @interface MainViewController : UIViewController @property (nonatomic, retain) UITextField *labelTwo; @end #impo