iOS通知模式

iOS的通知中心功能介绍

负责协调应用中不同对象之间的消息通信。

每个应用程序都会有个通知中心(NSNotifictionCenter)的实例。

任何对象都可以通过通知中心发布通知,并携带信息。其他对象可以对可能发消息的对象进行订阅。这就类似与广播和广播订阅中。发送源于接受者的关系可以说一对一也可以是一对多。

 

一条完整的通知

 

需要包含三个部分:

1、通知名称(标题):(NSString *)name

2、通知发布者:(id)object

3、通知携带信息(内容):(NSDictionary *)userInfo

 

初始化一个NSNotifiction对象

两个类方法:

+ (instancetype)notificationWithName:(NSString *)aName object:

(id)anObject;

+ (instancetype)notificationWithName:(NSString *)aName object:

(id)anObject userInfo:(NSDictionary*)aUserInfo;

一个对象方法:

- (instancetype)initWithName:(NSString *)name object:(id)object

   userInfo:(NSDictionary*)userInfo;

 

发布通知

通过NSNotifictionCenter提供的方法来发布通知

- (void)postNotification:(NSNotification*)notification;

发布⼀一个notification通知,可在notification对象中设置通知的名称通知发布者额外信息

 

 - (void)postNotificationName:(NSString*)aName object: (id)anObject;

发布⼀一个名称为aName的通知,anObject为这个通知的发布者

 

 - (void)postNotificationName:(NSString*)aName object:(id)anObject

userInfo:(NSDictionary *)aUserInfo;

 发布⼀一个名称为aName的通知,anObject为这个通知的发布者,aUserInfo为额外信息

 

 

注册通知接收者

常用方法:

同样地,可以使用NSNotifictionCenter提供的方法来注册接收着:

- (void)addObserver:(id)observerselector:(SEL)aSelector name:

(NSString *)aName object:(id)anObject;

 

参数解析:

  • observer:监听器,即谁要接收这个通知

 

  • aSelector:收到通知后调用的方法,如果方法可以携带参数则将并且将通知对象当做参数传⼊入。

 

  • aName:通知的名称(标题)。如果为nil,那么⽆无论通知的名称是什么,监听器都能收到这个通知

 

  • anObject:通知发布者。如果为anObjectaName都为nil,监听器都收到所有的通知

 

还有一个注册在其他队列中的接收者的方法:

-(id)addObserverForName:(NSString*)nameobject:(id)obj queue:(NSOperationQueue*)queue usingBlock:(void (^) (NSNotification *note))block;

  • name:通知的名称
  •  obj:通知发布者
  •  block:收到对应的通知时,会回调这个block
  •  queue:决定了block在哪个操作队列中执⾏行,如果传nil,默认在当前操作队 列中同步执⾏行

 

移除监听

为什么要移除监听:如果监听没有移除,则当监听的对象销毁时,其在通知中心注册的接受者依旧存在,则当发送者发出广播后,接收者仍然可以收到消息,可能会导致应用崩溃。

 

 

- (void)removeObserver:(id)observer;

- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

 

 

PS:一般在将移除监听者的代码反正对象的dealloc方法中:

 - (void)dealloc {

//[super dealloc]; ⾮ARC中需要调⽤用此句

   [[NSNotificationCenterdefaultCenter] removeObserver:self];
}

 

系统通知

我们的应用程序可以发送通知,同样地,系统当然也能发送通知,而且有一个专门的UIDevice类来提供。该类提供一个单例对象,它代表着设备,通过它可以获得⼀一些设备相关的信息,⽐比如电池电量值(batteryLevel)、电池状态(batteryState)、设备的类型(model,⽐比如iPod、iPhone等)、设备的系统(systemVersion)

 

获取UIDevice的单例对象:

[UIDevice currentDevice]

 

UIDevice的常见通知:

UIDeviceOrientationDidChangeNotification// 设备旋转

UIDeviceBatteryStateDidChangeNotification// 电池状态改变

UIDeviceBatteryLevelDidChangeNotification // 电池电量改变

UIDeviceProximityStateDidChangeNotification // 近距离传感器(⽐比如设备贴 近了使⽤用者的脸部

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值