ios的notification机制是同步的还是异步的

本文详细介绍了iOS中事件广播机制的特点,与JavaScript的事件机制不同,iOS的通知中心默认采用同步方式处理通知,这意味着发送通知后将阻塞后续代码直至所有监听者完成处理。为了实现异步处理,开发者需要在监听者的回调方法中手动开启新线程。

与javascript中的事件机制不同,ios里的事件广播机制是同步的,默认情况下,广播一个通知,会阻塞后面的代码:

Objc代码  收藏代码
  1. -(void) clicked  
  2. {  
  3.     NSNotificationCenter *center =  [NSNotificationCenter defaultCenter];  
  4.     [center postNotificationName:@"event_happend" object:self];  
  5.       
  6.     NSLog(@"all handler done");  
  7. }  


按下按钮后,发送一个广播,此前已经注册了2个此事件的侦听者

Objc代码  收藏代码
  1. -(id) init  
  2. {  
  3.     self = [super init];  
  4.     if(self){  
  5.         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(whenReceive:) name:@"event_happend" object:nil];  
  6.     }  
  7.     return self;  
  8. }  
  9.   
  10.   
  11. -(void) whenReceive:(NSNotification*) notification  
  12. {  
  13.     NSLog(@"im1111");  
  14. }  

Objc代码  收藏代码
  1. -(id) init  
  2. {  
  3.     self = [super init];  
  4.     if(self){  
  5.         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(whenReceive:) name:@"event_happend" object:nil];  
  6.     }  
  7.     return self;  
  8. }  
  9.   
  10.   
  11. -(void) whenReceive:(NSNotification*) notification  
  12. {  
  13.     NSLog(@"im22222");  
  14. }  

执行这段代码,首先会输出im1111,然后是im22222,最后才是all handler done。调试发现,代码始终是跑在同一个线程中(广播事件的线程),广播事件之后的代码被阻塞,直到所有的侦听者都执行完响应

所以,由于NotificationCenter的这个特性,如果希望广播的事件异步处理,则需要在侦听者的方法里开启新线程。应该把Notification作为组件间解耦的方式,而不是利用它来实现异步处理

外卖服务、同城跑腿、同城配送、代客下单、线下当面付、多商家入驻、配送员管理、店员权限管理、用户充值、积分体系、优惠券营销、会员等级升级、配送会员卡、顾客分层等级、天天特价、分享有礼、页面 DIY 装修、外卖催单、扫码点餐、餐桌预定、排队等号、新用户福利、下单奖励、积分商城、实体会员卡、活动海报制作、平台推广、分销员体系、区域代理、多平台配送对接(达达 / UU 跑腿 / 闪送 / 点我达 / 顺丰同城 / 蜂鸟 / 美团 / 饿了么 / 快跑者)、外卖采集、商户广告投放、套餐红包、店铺业务员、同城帖子发布、砍价活动、拼团抢购、商家入驻、区域购、准时宝、超值换购、隐私号保护、智能客服、商户会员卡、多风格模板、商户独立结算、公众号对接、配送员考核、商户自主发单、商户考核机制、多段式配送、拼好饭、抽奖开奖、云喇叭播报、货币汇率兑换、流失客户精准营销、多语言适配(简体中文 / 繁体中文 / 维文)、多元红包玩法(通用红包 / 分享红包 / 专享红包 / 会员红包)、专属商品、积分签到、第二份半价、任务红包、消息通知中心、多种支付方式(支付宝 / 余额 / 找人代付 / 微信 / 货到付款 / 微信分账 / 头条支付)、商户线上进件、店内点餐、桌台预约、门店呼叫服务、到店排队、门店新客活动、满减 / 满赠 / 进店领券 / 下单返券 / 下单返现、配送费优惠、自提折扣、门店代金券、门店装修、打印设备对接、预订外卖、服务费设置、多渠道消息通知(短信 / 订阅消息 / 模板消息 / 语音)、服务范围划定、图片资源管理、平台资讯、微信直播、跑腿参数配置、全球化汇率、权限分级管理、商户费率设置、配送员与商户奖惩制度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值