iOS通知模式
2016-05-17 23:42
351 查看
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:通知发布者。如果为anObject和aName都为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
// 近距离传感器(⽐比如设备贴
近了使⽤用者的脸部)
负责协调应用中不同对象之间的消息通信。
每个应用程序都会有个通知中心(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:通知发布者。如果为anObject和aName都为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
// 近距离传感器(⽐比如设备贴
近了使⽤用者的脸部)
相关文章推荐
- iOS开发小结 - 通过PUT请求上传数据
- iOS开发小结 - 通过PUT请求上传数据
- ios自定义控件——轮播图控件
- iOS开发-KVO的奥秘
- iOS开发中邮箱,电话号码,身份证,密码,昵称正则表达式验证
- iOS开发之AsyncSocket使用教程
- iOS收到推送后,跳转到某一页面
- iOS 性能测试 - FBMemoryProfiler
- iOS9中使用提示框的正确实现方式
- IOS CoreText.framework --- 段落样子CTParagraphStyle
- iOS开发-进阶:JS与OC的交互
- 关于购物车计算金钱的问题
- 每日健康菜谱 操作指南
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- Thinkpad T450 如何进入到BIOS
- ios 禁止输入表情
- MBProgressHUD(透明指示层)详细使用
- IOS开发中数据持久化的几种方法--NSUserDefaults
- ios 国际化的使用
- iOS - 报错 The dependency `xxx` is not used in any concrete target