NSNotificationCenter使用
1. NSNotificatinCenter,又叫通知中心。每个应用程序都有一个通知中心的(NSNotificationCenter)实例,专门负责协调不同对象之间的消息通信。在应用中任何对象都可以向通知中心发布通知(NSNotification)。其它感兴趣的对象可以申请监听这个对象。
2. 通知(NSNotification)一般包括3个属性:通知名称、通知发布者、附带的信息。
-(NSString*)name 通知名称 -(id)object通知发布者
-(NSDictionary*)userInfo 附带的消息
3.发布通知,常用的三种方法。
-(void)postNotification(NSNotification*)notification
发布一个notification通知,可在notification对象中设置通知发布者、通知名称、
附带的信息。(之前打包成一个通知对象)
-(void)postNotificationName:(NSString*)aName object:(id)anObject;
aName:发布一个为aName的通知。
anObject:发布者
-(void)postNotificationName:(NSString*)aName object:(id)anObject
userInfo:(NSDictionary*)aUserInfo;
aName:发布一个为aName的通知
anObject:发布者
aUserInfo:为额外信息。
4.注册通知监听器
-(void)addObserver:(id)observerselector:(SEL)aSelector name:(NSStrig *)aName object:(id)anObject;
observer:监听器,即谁要接受这个通知
aSelector:收到通知后,回调监听器的这个方法,并且把通知对象当参数传入。
aName:通知的名称,如果为nil,那么无论通知的名称是什么,监听器都能听到。
anObject:通知发布者。如果为anObject和aName都为nil.监听器接受所有的通知.
5.注册通知监听器
-(id)addObserverForName:(NSString*)name object:(id)obj
queue:(NSOperarionQueue*)queue
usingBlock:(void(^)NSNotifcation *))bolock;
name: 通知的名称
obj:通知发布者
queue: 决定了block在哪个操作队列中执行,如果传nil,默认在当前操作队列
中同步执行
block: 收到对应的通知时,会调用这个block
6.取消注册通知监听器
因为在通知中心不会保留(retain)监听对象,在通知中心注册过的对象,必须释放前取消注册。否则,当相应的通知在次出现时,通知中心仍然会向监听者发送消息。因为相应的监听器对象已经被释放了,所以可能导致程序崩溃。
方法如下:
-(void)removeObserve:(id)observe;
-(void)removeObserve:(id)observername:(NSString *)aName object:(id)anObject;
使用方式:
-(void)dealloc{
//[super dealloc] //MRC下使用
[[NSNotificationCenter defaultCenter] removeObserver: 监听对象];
}
7.通知和代理:
相同点: 利用通知和代理来完成对象之间的通信,从而完成相应的操作。
不同点: 使用代理时:代理必须遵守协议,接着实现代理方法。一对一关系。
使用通知时:需要发布和监听,它们之间,可以是一对多关系、
多对多关系。
版权声明:本文为博主原创文章,未经博主允许不得转载。